Ruby - Hashes
Un Hash es una colección de pares clave-valor como este: "empleado" => "salario". Es similar a un Array, excepto que la indexación se realiza mediante claves arbitrarias de cualquier tipo de objeto, no un índice entero.
El orden en el que atraviesa un hash por clave o valor puede parecer arbitrario y generalmente no estará en el orden de inserción. Si intenta acceder a un hash con una clave que no existe, el método devolverá nil .
Creando hashes
Al igual que con las matrices, hay varias formas de crear hashes. Puede crear un hash vacío con el nuevo método de clase:
months = Hash.new
También puede usar new para crear un hash con un valor predeterminado, que de lo contrario es nulo :
months = Hash.new( "month" )
or
months = Hash.new "month"
Cuando accede a cualquier clave en un hash que tiene un valor predeterminado, si la clave o el valor no existe, el acceso al hash devolverá el valor predeterminado:
#!/usr/bin/ruby
months = Hash.new( "month" )
puts "#{months[0]}"
puts "#{months[72]}"
Esto producirá el siguiente resultado:
month
month
#!/usr/bin/ruby
H = Hash["a" => 100, "b" => 200]
puts "#{H['a']}"
puts "#{H['b']}"
Esto producirá el siguiente resultado:
100
200
Puede usar cualquier objeto Ruby como clave o valor, incluso una matriz, por lo que el siguiente ejemplo es válido:
[1,"jan"] => "January"
Métodos integrados de hash
Necesitamos tener una instancia de objeto Hash para llamar a un método Hash. Como hemos visto, la siguiente es la forma de crear una instancia de objeto Hash:
Hash[[key =>|, value]* ] or
Hash.new [or] Hash.new(obj) [or]
Hash.new { |hash, key| block }
Esto devolverá un nuevo hash poblado con los objetos dados. Ahora, usando el objeto creado, podemos llamar a cualquier método de instancia disponible. Por ejemplo
#!/usr/bin/ruby
$, = ", "
months = Hash.new( "month" )
months = {"1" => "January", "2" => "February"}
keys = months.keys
puts "#{keys}"
Esto producirá el siguiente resultado:
["1", "2"]
Los siguientes son los métodos hash públicos (asumiendo que el hash es un objeto de matriz):
No Señor. | Métodos y descripción |
---|---|
1 | hash == other_hash Comprueba si dos hashes son iguales, en función de si tienen el mismo número de pares clave-valor y si los pares clave-valor coinciden con el par correspondiente en cada hash. |
2 | hash.[key] Usando una clave, hace referencia a un valor de hash. Si no se encuentra la clave, devuelve un valor predeterminado. |
3 | hash.[key] = value Asocia el valor dado por valor con la clave dada por clave . |
4 | hash.clear Elimina todos los pares clave-valor del hash. |
5 | hash.default(key = nil) Devuelve el valor predeterminado de hash , nulo si no se establece de manera predeterminada =. ([] devuelve un valor predeterminado si la clave no existe en hash ). |
6 | hash.default = obj Establece un valor predeterminado para el hash . |
7 | hash.default_proc Devuelve un bloque si el hash fue creado por un bloque. |
8 | hash.delete(key) [or] array.delete(key) { |key| block } Elimina un par clave-valor del hash por clave . Si se usa bloque, devuelve el resultado de un bloque si no se encuentra el par. Comparar delete_if . |
9 | hash.delete_if { |key,value| block } Elimina un par clave-valor del hash para cada par que el bloque evalúa como verdadero . |
10 | hash.each { |key,value| block } Itera sobre hash , llamando al bloque una vez para cada clave, pasando el valor-clave como una matriz de dos elementos. |
11 | hash.each_key { |key| block } Itera sobre hash , llamando al bloque una vez para cada clave, pasando la clave como parámetro. |
12 | hash.each_key { |key_value_array| block } Itera sobre hash , llamando al bloque una vez para cada clave , pasando la clave y el valor como parámetros. |
13 | hash.each_key { |value| block } Itera sobre hash , llamando al bloque una vez para cada clave , pasando el valor como parámetro. |
14 | hash.empty? Comprueba si el hash está vacío (no contiene pares clave-valor) y devuelve verdadero o falso . |
15 | hash.fetch(key [, default] ) [or] hash.fetch(key) { | key | block } Devuelve un valor de hash para la clave dada . Si no se puede encontrar la clave y no hay otros argumentos, genera una excepción IndexError ; si se da por defecto , se devuelve; si se especifica el bloque opcional, se devuelve su resultado. |
dieciséis | hash.has_key?(key) [or] hash.include?(key) [or] hash.key?(key) [or] hash.member?(key) Comprueba si una clave determinada está presente en el hash y devuelve verdadero o falso . |
17 | hash.has_value?(value) Comprueba si el hash contiene el valor dado . |
18 | hash.index(value) Devuelve la clave para el valor dado en hash, nula si no se encuentra ningún valor coincidente. |
19 | hash.indexes(keys) Devuelve una nueva matriz que consta de valores para las claves dadas. Insertará el valor predeterminado para las claves que no se encuentran. Este método está en desuso. Utilice seleccionar. |
20 | hash.indices(keys) Devuelve una nueva matriz que consta de valores para las claves dadas. Insertará el valor predeterminado para las claves que no se encuentran. Este método está en desuso. Utilice seleccionar. |
21 | hash.inspect Devuelve una bonita versión de cadena impresa de hash. |
22 | hash.invert Crea un nuevo hash , invirtiendo claves y valores a partir del hash ; es decir, en el nuevo hash, las claves de hash se convierten en valores y los valores se convierten en claves. |
23 | hash.keys Crea una nueva matriz con claves de hash . |
24 | hash.length Devuelve el tamaño o la longitud del hash como un número entero. |
25 | hash.merge(other_hash) [or] hash.merge(other_hash) { |key, oldval, newval| block } Devuelve un nuevo hash que contiene el contenido de hash y other_hash , sobrescribiendo pares en hash con claves duplicadas con las de other_hash . |
26 | hash.merge!(other_hash) [or] hash.merge!(other_hash) { |key, oldval, newval| block } Igual que la fusión, pero los cambios se realizan en su lugar. |
27 | hash.rehash Reconstruye el hash basándose en los valores actuales de cada clave . Si los valores han cambiado desde que se insertaron, este método vuelve a indexar el hash . |
28 | hash.reject { |key, value| block } Crea un nuevo hash para cada par que el bloque evalúa como verdadero |
29 | hash.reject! { |key, value| block } Igual que rechazar , pero los cambios se realizan en su lugar. |
30 | hash.replace(other_hash) Reemplaza el contenido de hash con el contenido de other_hash . |
31 | hash.select { |key, value| block } Devuelve una nueva matriz que consta de pares clave-valor de hash para los que el bloque devuelve verdadero . |
32 | hash.shift Elimina un par clave-valor del hash y lo devuelve como una matriz de dos elementos. |
33 | hash.size Devuelve el tamaño o la longitud del hash como un número entero. |
34 | hash.sort Convierte hash en una matriz bidimensional que contiene matrices de pares clave-valor, luego lo ordena como una matriz. |
35 | hash.store(key, value) Almacena un par clave-valor en hash . |
36 | hash.to_a Crea una matriz bidimensional a partir de hash. Cada par clave / valor se convierte en una matriz y todas estas matrices se almacenan en una matriz contenedora. |
37 | hash.to_hash Devuelve hash (propio). |
38 | hash.to_s Convierte hash en una matriz, luego convierte esa matriz en una cadena. |
39 | hash.update(other_hash) [or] hash.update(other_hash) {|key, oldval, newval| block} Devuelve un nuevo hash que contiene el contenido de hash y other_hash , sobrescribiendo pares en hash con claves duplicadas con las de other_hash . |
40 | hash.value?(value) Comprueba si el hash contiene el valor dado . |
41 | hash.values Devuelve una nueva matriz que contiene todos los valores de hash . |
42 | hash.values_at(obj, ...) Devuelve una nueva matriz que contiene los valores de hash asociados con la clave o claves dadas. |