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.