如何添加到Ruby中现有的哈希?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (44)

关于添加key => value对于Ruby中现有的填充哈希,我正在研究。

我正试图找到一种最简单的方法,通过哈希实现与数组相同的结果:

x = [1, 2, 3, 4]
x << 5
p x
提问于
用户回答回答于

如果有哈希,则可以通过按键引用项来向其添加项目:

hash = { }
hash[:a] = 'a'
hash[:a]
# => 'a'

在这里,就像[ ]创建一个空数组,{ }将创建一个空哈希。

数组按特定顺序有零个或多个元素,其中可以重复元素。哈希包含零或多个元素。按键组织,其中键可能不会被复制,但是存储在这些位置中的值可以被复制。

Ruby中的哈希非常灵活,可以拥有几乎任何类型的键。这使得它不同于在其他语言中找到的字典结构。

重要的是要记住,哈希的特定性质通常很重要:

hash = { :a => 'a' }

# Fetch with Symbol :a finds the right value
hash[:a]
# => 'a'

# Fetch with the String 'a' finds nothing
hash['a']
# => nil

# Assignment with the key :b adds a new entry
hash[:b] = 'Bee'

# This is then available immediately
hash[:b]
# => "Bee"

# The hash now contains both keys
hash
# => { :a => 'a', :b => 'Bee' }

还可以对几乎任何内容进行索引,包括类、数字或其他哈希。

hash = { Object => true, Hash => false }

hash[Object]
# => true

hash[Hash]
# => false

hash[Array]
# => nil

哈希可以转换为数组,反之亦然:

# Like many things, Hash supports .to_a
{ :a => 'a' }.to_a
# => [[:a, "a"]]

# Hash also has a handy Hash[] method to create new hashes from arrays
Hash[[[:a, "a"]]]
# => {:a=>"a"} 

当涉及到“插入”事物到哈希时,可以一次只做一次,或者使用merge方法组合哈希:

{ :a => 'a' }.merge(:b => 'b')
# {:a=>'a',:b=>'b'}

请注意,这不会改变原始哈希,而是返回一个新哈希。如果要将一个散列组合成另一个散列,则可以使用merge!方法:

hash = { :a => 'a' }

# Returns the result of hash combined with a new hash, but does not alter
# the original hash.
hash.merge(:b => 'b')
# => {:a=>'a',:b=>'b'}

# Nothing has been altered in the original
hash
# => {:a=>'a'}

# Combine the two hashes and store the result in the original
hash.merge!(:b => 'b')
# => {:a=>'a',:b=>'b'}

# Hash has now been altered
hash
# => {:a=>'a',:b=>'b'}

与字符串和数组上的许多方法一样,!指示它是就地行动。

用户回答回答于

扫码关注云+社区