Hashes

Hashes (también conocidos como arrays asociativos, mapas o diccionarios) son similare a los arrays en que son una colección indexada de referencias a objetos. Sin embargo, mintras que los índices de los arrays son numéricos, es posible indexar un hash con objetos de cualquier tipo: cadenas, expresiones regulares, arrays, etc. Cuando guardos un valor en un hash, de hecho estás proporcionando dos objetos: el índice (regularmete llamado key) y el valor.

El ejemplo p040hash.rb utiliza literales hash, una lista de pares key => valor delimitados por corchetes ({}):

1 h = {'perro' => 'canino', 'gato' => 'felino', 'elefante' => 'paquidermo', 12 => 'doceavo'}
2 puts h.length  # 3
3 puts h['perro']   # 'conino'
4 puts h
5 puts h[12]

El resultado es:

Comparados con los arrays, los hashes tienen una ventaja significativa: pueden usar cualquier objeto como índice. Sin embargo, sus elementos no están ordenados así es que no puedes utilizarlas fácilmente como una pila (stack) on un queue.

Los hashes tienen un valor por defecto que es regresado cuando intentas accesar keys que no existen. Este valor es nil.

Usando símbolos como keys en un Hash

Es una práctica común utilizar símbolos como keys en un hash en vez de cadenas. Por ejemplo: p041symbolhash.rb

1 persona = Hash.new
2 persona[:apodo] = 'Qino'
3 persona[:idioma] = 'Castellano'
4 persona[:nombre] = 'Joaquín'
5 
6 puts persona[:nombre] # Joaquin