English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Hash en Ruby

El Hash es una colección de pares clave-valor como "clave" => "valor". El Hash es similar a un array, pero su índice no se limita a usar números.

El índice de Hash (o también llamado "clave") puede ser casi cualquier objeto.

Hash, aunque es similar a un array, tiene una importante diferencia: los elementos de un Hash no tienen un orden específico. Si el orden es importante, debe usar un array.

Crear hash

Al igual que con los arrays, hay varias formas de crear hashes. Puede crear un hash a través de new Crear un hash vacío mediante métodos de clase:

months = Hash.new

También puede usar new Crear un hash con valor por defecto, un hash sin valor por defecto es nulo:

months = Hash.new("month")
 
o
 
months = Hash.new "month"

Cuando accede a cualquier clave de un hash con valor por defecto, si la clave o el valor no existe, el acceso al hash devolverá el valor por defecto:

Ejemplo en línea

#!/usr/bin/ruby
 
months = Hash.new("month")
 
puts "#{months[0]}"
puts "#{months[72]]"

El resultado de ejecutar el ejemplo anterior es:

month
month

Ejemplo en línea

#!/usr/bin/ruby
 
H = Hash["a" => 100, "b" => 200]
 
puts "#{H['a']}"
puts "#{H['b']}"

El resultado de ejecutar el ejemplo anterior es:

100
200

Puede usar cualquier objeto Ruby como clave o valor, incluso un array, como se muestra en el siguiente ejemplo:

[1, "jan"] => "January"

Métodos integrados de hash

Si es necesario llamar a métodos de Hash, primero se debe instanciar un objeto Hash. A continuación se presentan algunos ejemplos de cómo crear un objeto Hash:

Hash[[key =>|, value]* ] or
 
Hash.new [or] Hash.new(obj) [or]
 
Hash.new { |hash, key| block }

Esto devolverá un nuevo hash lleno con el objeto proporcionado. Ahora, podemos llamar a cualquier método disponible con el objeto creado. Por ejemplo:

Ejemplo en línea

#!/usr/bin/ruby
 
$, = ", "
months = Hash.new("month")
 
months = {"1" => "January", "2" => "February"
 
keys = months.keys
 
puts "#{keys}"

El resultado de ejecutar el ejemplo anterior es:

"["1", "2"]

A continuación se presentan los métodos comunes de hash (asumiendo hash es un objeto Hash):

Número de ordenMétodo & Descripción
1hash == other_hash
Verificar si dos hashes tienen la misma cantidad de pares clave-valor y si estos pares coinciden, para determinar si los dos hashes son iguales.
2hash[key]
Usar la clave para obtener el valor del hash. Si no se encuentra la clave, se devuelve el valor por defecto.
3hash[key]=value
Convertir value el valor proporcionado con clave asociar el clave proporcionada.
4hash.clear
eliminar todos los pares clave-valor del hash.
5hash.default(key = nil)
Devuelve hash el valor por defecto, si no se establece mediante default=, devuelve nil. (Si la clave está hash no existe, entonces [] devuelve un valor por defecto.)
6hash.default = obj
para hash establecer el valor por defecto.
7hash.default_proc
si hash creado mediante un bloque, devuelve el bloque.
8hash.delete(key) [o]
array.delete(key) { |key| bloque }

mediante clave desde hash eliminar el par clave-valor. Si se utiliza un bloque y no se encuentra el par clave-valor coincidente, devuelve el resultado del bloque. Compararlo con eliminar_si comparar.
9hash.delete_if { |key,value| bloque }
bucle es true de cada bloque, desde hash eliminar el par clave-valor.
10hash.each { |key,value| bloque }
recorrer hashpara cada clave llamar una vez al bloque, pasando-value como un array de dos elementos.
11hash.each_key { |key| bloque }
recorrer hashpara cada clave llamar una vez al bloque, pasando clave como parámetro.
12hash.each_key { |key_value_array| bloque }
recorrer hashpara cada clave llamar una vez al bloque, pasando clave y value como parámetro.
13hash.each_value { |value| bloque }
recorrer hashpara cada clave llamar una vez al bloque, pasando value como parámetro.
14hash.empty?
verificar si el hash está vacío (sin pares clave-valor), devuelve true o falso.
15hash.fetch(key [, por defecto] ) [o]
hash.fetch(key) { | key | bloque }

mediante clave desde hash devuelve el valor. Si no se encuentra clavey no se proporcionan otros parámetros, lanza IndexError excepción; si se proporciona por defectodevuelve por defectosi se especificó un bloque opcional, devuelve el resultado del bloque.
16hash.has_key?(key) [o] hash.include?(key) [o]
hash.key?(key) [o] hash.member?(key)

verificar clave si existe en el hash, devuelve true o falso.
17hash.has_value?(value)
verificar si el hash contiene value.
18hash.index(value)
para value devuelve clavedevuelve nulo.
19hash.indexes(keys)
devuelve un nuevo array compuesto por los valores de las claves dadas. Si no se encuentra la clave, se inserta el valor predeterminado. Este método ha sido descontinuado, por favor usa select.
20hash.indices(keys)
devuelve un nuevo array compuesto por los valores de las claves dadas. Si no se encuentra la clave, se inserta el valor predeterminado. Este método ha sido descontinuado, por favor usa select.
21hash.inspect
devuelve la versión de impresión del hash.
22hash.invert
Crear un nuevo hashinvierte hash de keys y valuesEs decir, en el nuevo hash,hash las claves se convierten en valores, y los valores en claves.
23hash.keys
Crear un nuevo array con hash las claves en
24hash.length
volver en forma de entero hash tamaño o longitud.
25hash.merge(other_hash) [o]
hash.merge(other_hash) { |key, oldval, newval| bloque }

Devuelve un nuevo hash que contiene hash y other_hash el contenido se sobrescribe, reescribiendo hash con other_hash Pares clave-valor con claves repetidas.
26hash.merge!(other_hash) [o]
hash.merge!(other_hash) { |key, oldval, newval| bloque }

es equivalente a merge, pero en realidad el hash cambia.
27hash.rehash
basado en cada clave la valor actual hashSi después de la inserción el valor cambia, este método volverá a indexar hash.
28hash.reject { |key, value| bloque }
similar a delete_if, pero actúa en una copia del hash. Equivalente a hsh.dup.delete_if.
29hash.reject! { |key, value| bloque }
equivalente a delete_if, pero si no hay modificaciones, devuelve nil.
30hash.replace(other_hash)
Convertir hash el contenido se reemplaza por other_hash el contenido.
31hash.select { |key, value| bloque }
devolver un nuevo array compuesto por bloque Devuelve true del hash constituido por pares clave-valor.
32hash.shift
desde hash eliminar un par clave-valor de hash y devolverlo como un array de dos elementos.
33hash.size
volver en forma de entero hash del tamaño o length.
34hash.sort
Convertir hash convertir en un array bidimensional que contiene pares clave-valor y luego ordenarlo.
35hash.store(key, value)
almacenar hash de uno de los pares clave-valor.
36hash.to_a
Crear un array bidimensional a partir de hash. Cada par clave-valor se convierte en un array y todos estos arrays se almacenan en un array.
37hash.to_hash
Devuelve hash(self).
38hash.to_s
Convertir hash Convertir en un array y luego convertir ese array en una cadena.
39hash.update(other_hash) [o]
hash.update(other_hash) {|key, oldval, newval| block}

Devuelve un nuevo hash que contiene hash y other_hash el contenido, reescribe hash que contiene other_hash Pares clave-valor con claves repetidas.
40hash.value?(value)
Revisar hash ¿Contiene el valor dado? value.
41hash.values
Devuelve un nuevo array que contiene hash todos los valores.
42hash.values_at(obj, ...)
Devuelve un nuevo array que contiene hash El valor asociado al clave proporcionada.