English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Hash do Ruby

O Hash (Hash) é um conjunto de pares de chave e valor como "key" => "value". O Hash é semelhante a um array, mas seu índice não está limitado ao uso de números.

O índice do Hash (ou chamado de "chave") pode ser quase qualquer objeto.

虽然 Hash 和数组类似,但有一个很重要的区别:Hash 的元素没有特定的顺序。如果顺序很重要,就要使用数组了。

创建哈希

与数组一样,有各种不同的方式来创建哈希。您可以通过 new 类方法创建一个空的哈希:

months = Hash.new

您也可以使用 new 创建带有默认值的哈希,不带默认值的哈希是 nil

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

当您访问带有默认值的哈希中的任意键时,如果键或值不存在,访问哈希将返回默认值:

在线示例

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

以上示例运行输出结果为:

month
month

在线示例

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

以上示例运行输出结果为:

100
200

您可以使用任何的 Ruby 对象作为键或值,甚至可以使用数组,如下示例所示:

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

哈希内置方法

如果需要调用 Hash 方法,需要先示例化一个 Hash 对象。以下是创建 Hash 对象示例的方式:

Hash[[key =>|, value]* ] or
 
Hash.new [or] Hash.new(obj) [or]
 
Hash.new {|hash, key| block }

这将返回一个使用给定对象进行填充的新的哈希。现在,使用创建的对象,我们可以调用任意可用的方法。例如:

在线示例

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

以上示例运行输出结果为:

"["1", "2"]

以下是公共的哈希方法(假设 hash 是一个 Hash 对象):

序号方法 & 描述
1hash == other_hash
检查两个哈希是否具有相同的键值对个数,键值对是否相互匹配,来判断两个哈希是否相等。
2hash[key]
使用键从哈希引用值。如果未找到键,则返回默认值。
3hash[key]=value
Converta value 给定的值与 key 关联给定的键。
4hash.clear
remove todos os pares de chave-valor do hash.
5hash.default(key = nil)
Retorna hash o valor padrão, se não for configurado através de default=, retorna nil. (Se a chave estiver hash não existe, então [] retorna um valor padrão.)
6hash.default = obj
para hash definir valor padrão.
7hash.default_proc
se hash se foi criado com bloco, retorna o bloco.
8hash.delete(key) [ou]
array.delete(key) { |key| bloco }

através de key de hash remove o par de chave-valor. Se usou bloco e não encontrou par de chave-valor correspondente, retorna o resultado do bloco. Compare-o com delete_if para comparar.
9hash.delete_if { |key, value| bloco }
bloco é true de cada bloco, a partir de hash e remove o par de chave-valor.
10hash.each { |key, value| bloco }
percorre hashpara cada key chama o bloco uma vez, passando o key-value como um array de dois elementos.
11hash.each_key { |key| bloco }
percorre hashpara cada key chama o bloco uma vez, passando key como parâmetro.
12hash.each_key { |key_value_array| bloco }
percorre hashpara cada key chama o bloco uma vez, passando key e value como parâmetro.
13hash.each_value { |value| bloco }
percorre hashpara cada key chama o bloco uma vez, passando value como parâmetro.
14hash.empty?
verifica se o hash está vazio (não contém pares de chave-valor), retorna true ou false.
15hash.fetch(key [, padrão] ) [ou]
hash.fetch(key) { |key| bloco }

através do valor fornecido key de hash o valor retornado. Se não encontrar keye não foram fornecidos outros parâmetros, lança IndexError exceção; se for fornecido padrãoentão retorna padrãoSe foi especificado um bloco opcional, retorna o resultado do bloco.
16hash.has_key?(key) [ou] hash.include?(key) [ou]
hash.key?(key) [ou] hash.member?(key)

verifica o valor fornecido key se ele existe no hash, retorna true ou false.
17hash.has_value?(value)
verifica se o hash contém o valor fornecido value.
18hash.index(value)
para o valor fornecido value retorna o valor do hash keySe não encontrar o valor correspondente, retorna nil.
19hash.indexes(keys)
retornar um novo array composto pelos valores das chaves fornecidas. Se a chave não for encontrada, será inserido o valor padrão. Este método foi descontinuado, use select.
20hash.indices(keys)
retornar um novo array composto pelos valores das chaves fornecidas. Se a chave não for encontrada, será inserido o valor padrão. Este método foi descontinuado, use select.
21hash.inspect
retornar a versão impressa do hash.
22hash.invert
criar um novo hashinverter hash do keys e valuesisto é, no novo hash,hash as chaves do hash se tornarão os valores e os valores se tornarão as chaves.
23hash.keys
criar um novo array com hash das chaves.
24hash.length
retornar em forma inteira hash o tamanho ou comprimento.
25hash.merge(other_hash) [ou]
hash.merge(other_hash) { |key, oldval, newval| block }

Retorna um novo hash contendo hash e other_hash o conteúdo, sobrescrever o hash com other_hash Par de chave-valor com chave repetida.
26hash.merge!(other_hash) [ou]
hash.merge!(other_hash) { |key, oldval, newval| block }

igual a merge, mas na verdade o hash muda.
27hash.rehash
baseado em cada key o valor atual hashSe o valor mudar após a inserção, o método reindexará hash.
28hash.reject { |key, value| block }
semelhante a delete_if, mas atua em uma cópia do hash. Igual a hsh.dup.delete_if.
29hash.reject! { |key, value| block }
igual a delete_if, mas se não houver modificação, retorna nil.
30hash.replace(other_hash)
Converta hash o conteúdo substituído por other_hash do conteúdo.
31hash.select { |key, value| block }
retornar um novo array composto por block Retorna true do hash constituído por pares de chave-valor.
32hash.shift
de hash remover um par de chave-valor do hash e retornar como um array de dois elementos.
33hash.size
retornar em forma inteira hash do size ou length.
34hash.sort
Converta hash transformar em um array bidimensional contendo pares de chave-valor e depois classificar.
35hash.store(key, value)
armazenar hash um par de chave-valor.
36hash.to_a
Criar um array bidimensional a partir do hash. Cada par de chave-valor é transformado em um array e todos esses arrays são armazenados em um array.
37hash.to_hash
Retorna hash(self).
38hash.to_s
Converta hash Converta em um array, então converta o array em uma string.
39hash.update(other_hash) [ou]
hash.update(other_hash) {|key, oldval, newval| block}

Retorna um novo hash contendo hash e other_hash o conteúdo, rewrite hash com other_hash Par de chave-valor com chave repetida.
40hash.value?(value)
Verificação hash Se contém o valor fornecido value.
41hash.values
Retorna um novo array contendo hash todas as valores.
42hash.values_at(obj, ...)
Retorna um novo array contendo hash O valor relacionado ao chave fornecida.