Ruby Hash

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

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

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

Crear un Hash

Al igual que con los arrays, hay diferentes formas de crear un Hash. Puede mediantenewmétodo de clase crear un Hash vacío:

months = Hash.new

También puede usarnewcrear un Hash con valor predeterminado; un Hash sin valor predeterminado esnil:

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

Cuando accede a cualquier clave en un Hash con valor predeterminado, si la clave o el valor no existe, al acceder al Hash se devolverá el valor predeterminado:

Ejemplo

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

Pruébalo »

El resultado de ejecutar el ejemplo anterior es:

month
month

Ejemplo

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

Pruébalo »

El resultado de ejecutar el ejemplo anterior es:

100
200

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

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

Métodos integrados de Hash

Si necesita llamar a métodos de Hash, primero debe instanciar un objeto Hash. A continuación se muestra 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 devuelve un nuevo Hash llenado con el objeto dado. Ahora, con el objeto creado, podemos llamar a cualquier método disponible. Por ejemplo:

Ejemplo

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

Pruébalo »

El resultado de ejecutar el ejemplo anterior es:

["1", "2"]

Los siguientes son los métodos públicos de Hash (asumiendo quehashes un objeto Hash):

N.ºMétodo & Descripción
1hash == other_hash
Comprueba si dos Hashes tienen el mismo número de pares clave-valor y si los pares clave-valor coinciden entre sí, para determinar si los dos Hashes son iguales.
2hash[key]
Usa la clave para obtener el valor del Hash. Si no se encuentra la clave, devuelve el valor predeterminado.
3hash[key]=value
tomarvalueEl valor dado se asocia conkeyla clave dada.
4hash.clear
Elimina todos los pares clave-valor del Hash.
5hash.default(key = nil)
Devuelvehashel valor predeterminado de. Si no se ha establecido mediante default=, devuelve nil. (Si la clave enhashno existe, entonces [] devuelve un valor predeterminado.)
6hash.default = obj
ParahashEstablece el valor predeterminado.
7hash.default_proc
Sihashse creó mediante un bloque, devuelve el bloque.
8hash.delete(key) [or]
array.delete(key) { |key| block }

Mediantekeydesdehashelimina el par clave-valor de. Si se usa un bloque y no se encuentra un par clave-valor que coincida, devuelve el resultado del bloque. Compáralo condelete_ifpara comparar.
9hash.delete_if { |key,value| block }
Si block estrueverdadero,hashse eliminan los pares clave-valor de.
10hash.each { |key,value| block }
Itera sobrehash, para cadakeyse llama a block una vez, pasando key-value como un array de dos elementos.
11hash.each_key { |key| block }
Itera sobrehash, para cadakeyse llama a block una vez, pasandokeycomo argumento.
12hash.each_key { |key_value_array| block }
Itera sobrehash, para cadakeyse llama a block una vez, pasandokeyyvaluecomo argumento.
13hash.each_value { |value| block }
Itera sobrehash, para cadakeyse llama a block una vez, pasandovaluecomo argumento.
14hash.empty?
Comprueba si el hash está vacío (no contiene pares clave-valor), devuelvetrueofalse。
15hash.fetch(key [, default] ) [or]
hash.fetch(key) { | key | block }

Mediante lakeydesdehashclave, devuelve el valor. Si no se encuentra la clavekey, y no se proporciona otro argumento, lanzaIndexErroruna excepción; si se proporcionadefault, devuelvedefault; si se especifica un block opcional, devuelve el resultado del block.
16hash.has_key?(key) [or] hash.include?(key) [or]
hash.key?(key) [or] hash.member?(key)

Comprueba si lakeyclave dada existe en el hash, devuelvetrueofalse。
17hash.has_value?(value)
Comprueba si el hash contiene el valor dado.value。
18hash.index(value)
Para el valorvaluedado, devuelve la clave en el hashkey; si no se encuentra un valor coincidente, devuelvenil。
19hash.indexes(keys)
Devuelve un nuevo array compuesto por los valores de las claves dadas. Las claves no encontradas tendrán el valor predeterminado. Este método está obsoleto, use select.
20hash.indices(keys)
Devuelve un nuevo array compuesto por los valores de las claves dadas. Las claves no encontradas tendrán el valor predeterminado. Este método está obsoleto, use select.
21hash.inspect
Devuelve la representación en cadena imprimible del hash.
22hash.invert
Crea un nuevohash, invirtiendohashlos pares clave-valor dekeysyvalues. Es decir, en el nuevo hash,hashlas claves de se convertirán en valores, y los valores en claves.
23hash.keys
Crea un nuevo array, conhashlas claves de
24hash.length
Devuelve en forma de enterohashel tamaño o la longitud de
25hash.merge(other_hash) [or]
hash.merge(other_hash) { |key, oldval, newval| block }

Devuelve un nuevo hash que contienehashyother_hashel contenido de, sobrescribiendo los pares clave-valor de hash que tienenother_hashclaves duplicadas con
26hash.merge!(other_hash) [or]
hash.merge!(other_hash) { |key, oldval, newval| block }

Igual que merge, pero el hash se modifica.
27hash.rehash
Basándose en cadakeyvalor actual de, reconstruyehash. Si el valor cambia después de la inserción, este método reindexahash。
28hash.reject { |key, value| block }
Similar a delete_if, pero actúa sobre una copia del hash. Equivale a hsh.dup.delete_if.
29hash.reject! { |key, value| block }
Equivale a delete_if, pero si no se realiza ninguna modificación, devuelve nil.
30hash.replace(other_hash)
tomarhashEl contenido deother_hashse reemplaza con el contenido de.
31hash.select { |key, value| block }
Devuelve un nuevo array, formado por los pares clave-valor deblockpara los que block devuelvetruedehashtrue.
32hash.shift
desdehashElimina un par clave-valor de, y devuelve ese par clave-valor como un array de dos elementos.
33hash.size
Devuelve en forma de enterohashdesizeel tamaño o length.
34hash.sort
tomarhashConvierte en un array bidimensional que contiene arrays de pares clave-valor, y luego lo ordena.
35hash.store(key, value)
Almacenahashun par clave-valor en.
36hash.to_a
Crea un array bidimensional a partir del hash. Cada par clave-valor se convierte en un array, y todos estos arrays se almacenan en un array.
37hash.to_hash
Devuelvehash(self)。
38hash.to_s
tomarhashel hash convertido en un array y luego ese array convertido en una cadena.
39hash.update(other_hash) [or]
hash.update(other_hash) {|key, oldval, newval| block}

Devuelve un nuevo hash que contienehashyother_hashel contenido de, sobrescribiendohashlos pares clave-valor de hash que tienenother_hashclaves duplicadas con
40hash.value?(value)
Comprueba sihashel hash contiene el valor dado.value。
41hash.values
Devuelve un nuevo array que contienehashtodos los valores de.
42hash.values_at(obj, ...)
Devuelve un nuevo array que contienehashlos valores de hash asociados a las claves dadas.
Otras extensiones