Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 合并两个散列_Ruby_Hash - Fatal编程技术网

Ruby 合并两个散列

Ruby 合并两个散列,ruby,hash,Ruby,Hash,我有两个带有键和值的散列 h1 = {"January"=>1, "February"=>2, "March"=>4, "April"=>5, "May"=>5, "June"=>6} h2 = {1=>3, 2=>5, 3=>10, 4=>12, 6=>14} 我期待有这样的结果 result = {3=>1, 5=>2, 10=>4, 12=>5, 14=>6} 我试过这个办法 如果希望1同

我有两个带有键和值的散列

h1 = {"January"=>1, "February"=>2, "March"=>4, "April"=>5, "May"=>5, "June"=>6}

h2 = {1=>3, 2=>5, 3=>10, 4=>12, 6=>14}
我期待有这样的结果

result = {3=>1, 5=>2, 10=>4, 12=>5, 14=>6}
我试过这个办法

如果希望1同时返回“first”和“one”,则需要存储 它们位于一个数组中,该数组将是1映射到的值


这是因为您要在列表中对其进行排序,请尝试执行以下操作,而不需要执行第二个foreach循环:

推荐方式:

hash1={“一月”=>1,“二月”=>2,“三月”=>4,“四月”=>5,“五月”=>5,“六月”=>6}
hash2={1=>3,2=>5,3=>10,4=>12,6=>14}
结果={}
#在这里,您必须将键值交换为键值
hash2.每个do |值,键|
如果结果[key].nil?
结果[键]=值
其他的
结果[键]{3=>1,5=>2,10=>3,12=>4,14=>6}

替代方法:

您可以压缩两个列表,一个是键,另一个是值,然后将它们放入字典中:

hash1 = {"January"=>1, "February"=>2, "March"=>4, "April"=>5, "May"=>5, "June"=>6}

hash2 = {1=>3, 2=>5, 3=>10, 4=>12, 6=>14}

results = {}

(hash2.values).zip(hash1.values).each do |key, value| 
  if results[key].nil?
    results[key] = value
  else 
    results[key] << value
  end
end

results
hash1={“一月”=>1,“二月”=>2,“三月”=>4,“四月”=>5,“五月”=>5,“六月”=>6}
hash2={1=>3,2=>5,3=>10,4=>12,6=>14}
结果={}
(hash2.values).zip(hash1.values).每个do |键,值|
如果结果[key].nil?
结果[键]=值
其他的
结果[键]{3=>1,5=>2,10=>4,12=>5,14=>5}


看看问题中的预期输出,这与预期结果中的最后一个键val应该是14-5不一样吗?wako,最后我想出了一个解决方案感谢@maxpleaner,你能看看这是否是你想要的吗?谢谢你的帮助,我想用我的第一个散列值和第二个散列值的结果散列,而不是像月份一样的值,为了提供更多细节,我的第一个散列值是每月的销售额,第二个是每月的价格范围,最后我想做3/1,5/2,10/4,12/5,14/6,并在折线图组中显示所有这些结果month@Wako好的,看我编辑过的答案,在最后我添加了一个新的信息,你可以用它来做
{1=>[3], 2=>[5], 3=>[10], 4=>[12], 6=>[14], "January"=>[1], "February"=>[2], "March"=>[4], "April"=>[5], "May"=>[5], "June"=>[6]}
hash1 = {"January"=>1, "February"=>2, "March"=>4, "April"=>5, "May"=>5, "June"=>6}

hash2 = {1=>3, 2=>5, 3=>10, 4=>12, 6=>14}

results = {}

#here you have to swap key-value for value-key

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

results
hash1 = {"January"=>1, "February"=>2, "March"=>4, "April"=>5, "May"=>5, "June"=>6}

hash2 = {1=>3, 2=>5, 3=>10, 4=>12, 6=>14}

results = {}

(hash2.values).zip(hash1.values).each do |key, value| 
  if results[key].nil?
    results[key] = value
  else 
    results[key] << value
  end
end

results