我使用以下键和值制作了两个哈希hash1
和hash2
。
输入:
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
应包含所有键和所有值。
答案 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"
现在你想要一个哈希,因为你有唯一的密钥。所以:
hash3 = hash1.merge(hash2)
答案 2 :(得分:2)
因为你正在学习一门新语言,并且仍在学习如何运作。我建议你无论你在做什么,都要看一下开发者文档。
从那里,您可以搜索您正在寻找的任何内容,并找到您可以使用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)