我怎样才能合并两个哈希?

时间:2013-07-06 18:52:09

标签: ruby hash

我使用以下键和值制作了两个哈希hash1hash2

输入:

hash1 = {1=>"One", 2=>"Two", 3=>"Three"}
hash2 = {4=>"First", 5=>"Second", 6=>"Third"}

结果:

我期待hash3给我一个像

这样的结果
hash3 #=> {1 => "One", 2 => "Two", 3 => "Three", 4 => "First", 5 => "Second", 6 => "Third"}

有谁能告诉我如何合并这两个哈希?假设hash3应包含所有键和所有值。

4 个答案:

答案 0 :(得分:4)

您似乎在寻找Hash#merge

hash1 = {1=>"One", 2=>"Two", 3=>"Three"}
hash2 = {4=>"First", 5=>"Second", 6=>"Third"}
hash3 = hash1.merge hash2
#=> {1 => "One", 2 => "Two", 3 => "Three", 4 => "First", 5 => "Second", 6 => "Third"}

考虑到你通过增加的整数序列访问哈希这一事实,你应该考虑使用数组而不是哈希。

result = hash1.values + hash2.values
# => ["One", "Two", "Three", "First", "Second", "Third"]

这样您仍然可以类似地访问您的值(例如result[2] #=> "Three"),但您的数据结构更简洁。

答案 1 :(得分:3)

如果你想让1同时返回“first”和“one”,你需要将它们存储在一个数组中,该数组将是1映射到的数值。

results = {}

hash1.each do |key, value|
  if results[key].nil?
    results[key] = [value]
  else
    results[key] << value

hash2.each do |key, value|
  if results[key].nil?
    results[key] = [value]
  else
    results[key] << value

results[1]
=> ["one", "first"]

更新

你显然不想要哈希。您想要一个仅包含值的数组。

results = hash1.values + hash2.values
=> ["one", "two", "three", "first", "second", "third"]

您可以像哈希一样访问此数组。请记住,数组是零索引的,所以:

results[0]
=> "one"
results[2]
=> "three"
results[5]
=> "third"

更新2

现在你想要一个哈希,因为你有唯一的密钥。所以:

hash3 = hash1.merge(hash2)

答案 2 :(得分:2)

因为你正在学习一门新语言,并且仍在学习如何运作。我建议你无论你在做什么,都要看一下开发者文档。

http://ruby-doc.org/

从那里,您可以搜索您正在寻找的任何内容,并找到您可以使用Objects ruby​​为您提供的其他有趣的内容。

要明确回答您的问题,您需要使用merge方法进行哈希。

{1: 'One', 2: 'Two', 3: 'Three'}.merge(4: 'Four', 5: 'Five', 6: 'Six)

将产生{1: 'One', 2: 'Two', 3: 'Three', 4: 'Four', 5: 'Five', 6: 'Six'}

答案 3 :(得分:1)

最少编码的解决方案

hash3 = hash1.merge(hash2)