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.