Ruby - Hashes
Um Hash é uma coleção de pares de valores-chave como este: "funcionário" => "salário". É semelhante a um Array, exceto que a indexação é feita por meio de chaves arbitrárias de qualquer tipo de objeto, não um índice inteiro.
A ordem em que você atravessa um hash por chave ou valor pode parecer arbitrária e geralmente não estará no pedido de inserção. Se você tentar acessar um hash com uma chave que não existe, o método retornará nil .
Criando Hashes
Assim como acontece com os arrays, há uma variedade de maneiras de criar hashes. Você pode criar um hash vazio com o novo método de classe -
months = Hash.new
Você também pode usar new para criar um hash com um valor padrão, que de outra forma é apenas nil -
months = Hash.new( "month" )
or
months = Hash.new "month"
Quando você acessa qualquer chave em um hash que tem um valor padrão, se a chave ou valor não existir, acessar o hash retornará o valor padrão -
#!/usr/bin/ruby
months = Hash.new( "month" )
puts "#{months[0]}"
puts "#{months[72]}"
Isso produzirá o seguinte resultado -
month
month
#!/usr/bin/ruby
H = Hash["a" => 100, "b" => 200]
puts "#{H['a']}"
puts "#{H['b']}"
Isso produzirá o seguinte resultado -
100
200
Você pode usar qualquer objeto Ruby como uma chave ou valor, até mesmo uma matriz, então o exemplo a seguir é válido -
[1,"jan"] => "January"
Métodos Hash embutidos
Precisamos ter uma instância do objeto Hash para chamar um método Hash. Como vimos, a seguir está a maneira de criar uma instância do objeto Hash -
Hash[[key =>|, value]* ] or
Hash.new [or] Hash.new(obj) [or]
Hash.new { |hash, key| block }
Isso retornará um novo hash preenchido com os objetos fornecidos. Agora, usando o objeto criado, podemos chamar quaisquer métodos de instância disponíveis. Por exemplo -
#!/usr/bin/ruby
$, = ", "
months = Hash.new( "month" )
months = {"1" => "January", "2" => "February"}
keys = months.keys
puts "#{keys}"
Isso produzirá o seguinte resultado -
["1", "2"]
A seguir estão os métodos de hash públicos (assumindo que o hash é um objeto de matriz) -
Sr. Não. | Métodos e Descrição |
---|---|
1 | hash == other_hash Testa se dois hashes são iguais, com base em se eles têm o mesmo número de pares de valor-chave e se os pares de valor-chave correspondem ao par correspondente em cada hash. |
2 | hash.[key] Usando uma chave, faz referência a um valor de hash. Se a chave não for encontrada, retorna um valor padrão. |
3 | hash.[key] = value Associa o valor fornecido por valor à chave fornecida por chave . |
4 | hash.clear Remove todos os pares de valores-chave do hash. |
5 | hash.default(key = nil) Retorna o valor padrão para hash , nil se não definido por default =. ([] retorna um valor padrão se a chave não existe no hash .) |
6 | hash.default = obj Define um valor padrão para hash . |
7 | hash.default_proc Retorna um bloco se o hash foi criado por um bloco. |
8 | hash.delete(key) [or] array.delete(key) { |key| block } Exclui um par de valores-chave de hash por chave . Se o bloco for usado, retorna o resultado de um bloco se o par não for encontrado. Compare delete_if . |
9 | hash.delete_if { |key,value| block } Exclui um par de valores-chave do hash para cada par que o bloco avalia como verdadeiro . |
10 | hash.each { |key,value| block } Itera por hash , chamando o bloco uma vez para cada chave, passando o valor-chave como uma matriz de dois elementos. |
11 | hash.each_key { |key| block } Repete o hash , chamando o bloco uma vez para cada chave, passando a chave como parâmetro. |
12 | hash.each_key { |key_value_array| block } Itera por hash , chamando o bloco uma vez para cada chave , passando a chave e o valor como parâmetros. |
13 | hash.each_key { |value| block } Repete o hash , chamando o bloco uma vez para cada chave , passando o valor como parâmetro. |
14 | hash.empty? Testa se o hash está vazio (não contém pares de valor-chave), retornando verdadeiro ou falso . |
15 | hash.fetch(key [, default] ) [or] hash.fetch(key) { | key | block } Retorna um valor de hash para a chave fornecida . Se a chave não puder ser encontrada e não houver outros argumentos, ela gerará uma exceção IndexError ; se o padrão for fornecido, ele será retornado; se o bloco opcional for especificado, seu resultado será retornado. |
16 | hash.has_key?(key) [or] hash.include?(key) [or] hash.key?(key) [or] hash.member?(key) Testa se uma determinada chave está presente no hash, retornando verdadeiro ou falso . |
17 | hash.has_value?(value) Testa se o hash contém o valor fornecido . |
18 | hash.index(value) Retorna a chave para o valor fornecido em hash, nulo se nenhum valor correspondente for encontrado. |
19 | hash.indexes(keys) Retorna uma nova matriz que consiste em valores para a (s) chave (s) fornecida (s). Irá inserir o valor padrão para as chaves que não foram encontradas. Este método está obsoleto. Use select. |
20 | hash.indices(keys) Retorna uma nova matriz que consiste em valores para a (s) chave (s) fornecida (s). Irá inserir o valor padrão para as chaves que não foram encontradas. Este método está obsoleto. Use select. |
21 | hash.inspect Retorna uma versão de sequência de caracteres bonita do hash. |
22 | hash.invert Cria um novo hash , invertendo chaves e valores do hash ; ou seja, no novo hash, as chaves do hash tornam-se valores e os valores tornam-se chaves. |
23 | hash.keys Cria uma nova matriz com chaves de hash . |
24 | hash.length Retorna o tamanho ou comprimento do hash como um inteiro. |
25 | hash.merge(other_hash) [or] hash.merge(other_hash) { |key, oldval, newval| block } Retorna um novo hash contendo o conteúdo de hash e other_hash , sobrescrevendo pares em hash com chaves duplicadas com aqueles de other_hash . |
26 | hash.merge!(other_hash) [or] hash.merge!(other_hash) { |key, oldval, newval| block } O mesmo que mesclar, mas as alterações são feitas no local. |
27 | hash.rehash Reconstrói o hash com base nos valores atuais de cada chave . Se os valores foram alterados desde que foram inseridos, este método reindexa o hash . |
28 | hash.reject { |key, value| block } Cria um novo hash para cada par que o bloco avalia como verdadeiro |
29 | hash.reject! { |key, value| block } O mesmo que rejeitar , mas as alterações são feitas no local. |
30 | hash.replace(other_hash) Substitui o conteúdo de hash pelo conteúdo de other_hash . |
31 | hash.select { |key, value| block } Retorna uma nova matriz que consiste em pares de valores-chave do hash para o qual o bloco retorna verdadeiro . |
32 | hash.shift Remove um par de valores-chave do hash , retornando-o como uma matriz de dois elementos. |
33 | hash.size Retorna o tamanho ou comprimento do hash como um inteiro. |
34 | hash.sort Converte o hash em uma matriz bidimensional contendo matrizes de pares de valores-chave e, em seguida, classifica-a como uma matriz. |
35 | hash.store(key, value) Armazena um par de valor-chave em hash . |
36 | hash.to_a Cria uma matriz bidimensional a partir do hash. Cada par chave / valor é convertido em uma matriz e todas essas matrizes são armazenadas em uma matriz contida. |
37 | hash.to_hash Retorna hash (self). |
38 | hash.to_s Converte o hash em uma matriz e, em seguida, converte essa matriz em uma string. |
39 | hash.update(other_hash) [or] hash.update(other_hash) {|key, oldval, newval| block} Retorna um novo hash contendo o conteúdo de hash e other_hash , sobrescrevendo pares em hash com chaves duplicadas com aqueles de other_hash . |
40 | hash.value?(value) Testa se o hash contém o valor fornecido . |
41 | hash.values Retorna uma nova matriz contendo todos os valores de hash . |
42 | hash.values_at(obj, ...) Retorna uma nova matriz contendo os valores do hash que estão associados à chave ou chaves fornecidas. |