2011-01-18 20 views
16

¿Es básicamente un diccionario solo una tabla hash?Dictionary = Hash?

También extra: En el código de Ruby "Hash.new {0}" ¿para qué es el "{0}" al final?

+11

"También bonificación:" - ¿qué gano? Cuchillos de carne? –

+2

un ego más grande ??? –

+0

en realidad, un diccionario tiene sus claves ordenadas. Un hash de ruby ​​no – Mauricio

Respuesta

31

Las palabras tabla, diccionario y mapa a menudo se utilizan como sinónimos (en el contexto de estructuras de datos). Un hash table/hash map es un tipo de tabla/diccionario/mapa.

El {0} es un bloque (función anónima) que ignora su argumento y devuelve el número 0. El bloque dado a Hash.new se llama para producir un valor predeterminado cuando una clave no se encuentra en el mapa hash.

I.e. si hago h = Hash.new {0} y luego h["key that does not exist"], obtengo 0, en lugar de nil (que obtendría sin {0}). Tenga en cuenta que en este caso donde el valor predeterminado es inmutable y no depende de la clave, no necesita usar el formulario de bloque de Hash.new, puede simplemente hacer Hash.new(0) para establecer 0 como el valor predeterminado.

7

Un diccionario simplemente asigna una clave a un valor. Hay muchas formas de lograr esto; una tabla hash es una de ellas.

16

En Rubí un hash es una clave, almacenar valor

h = Hash.new 
h['one'] = 1 
h['one'] #=> 1 
h['two'] #=> nil 

el {0} es un bloque que se evaluará si dónde llamar una clave que no existía, que es un valor por defecto.

h = Hash.new {0} 
h['one'] #=> 0 
h = Hash.new {|hash,key| "#{key} has Nothing"} 
h['one'] #=> "one has Nothing" 
3

Un diccionario es una interfaz conceptual. Una tabla hash es una implementación concreta.