我怎样才能简单地将哈希合并到一个新哈希?

时间:2009-06-10 11:16:35

标签: ruby-on-rails ruby arrays hash

I have a simple hash like so { "1234" => "5", "2345" => "6" }

如何创建一个包含键和值的新哈希?像这样:

{ key_id = "1234", value_id = "5" }, { key_id = "2345", value_id = "6" }

4 个答案:

答案 0 :(得分:6)

你真的想用这个来实现什么?如果您想要遍历所有键,可以使用.keys:

h = { "1234" => "5", "2345" => "6" }
h.keys
=> ["1234", "2345"]

如果你想创建一个哈希数组,你应该能够遍历键:

h = { "1234" => "5", "2345" => "6" }
a = []

h.each {|k, v| a << {:key_id => k, :value_id => v}

答案 1 :(得分:1)

通过“合并”两个哈希值,我认为你的意思是将两个不同哈希值的所有内容放入一个新的哈希值。因为散列的键必须是唯一的,所以如果两个源散列中存在相同的键,则只有一个值可以存活。

在这个例子中,我将hash x和hash y的内容合并到hash z中。如果存在任何重复键,则y中的值将覆盖z中的值。

x = { "a" => "1","b" => "2","c" => "3" }
y = { "c" => "999","d" => "4","e" => "5" }
z = {}

x.each do |key,value|
  z[key] = value
end

y.each do |key,value|
  z[key] = value
end

源哈希共有6个键。因为密钥“c”同时存在,所以合并的散列只有5个密钥。

=> {"a"=>"1", "b"=>"2", "c"=>"999", "d"=>"4", "e"=>"5"}

答案 2 :(得分:0)

您可以遍历每对原始哈希并构建一个哈希数组:

hashes = []
{ "1234" => "5", "2345" => "6" }.each_pair {|key, value| hashes << { :key_id => key, :value_id => value } }

将屈服:

[{:key_id=>"2345", :value_id=>"6"}, {:key_id=>"1234", :value_id=>"5"}]

答案 3 :(得分:0)

派生哈希的密钥应该是什么,与原始哈希相同?在这种情况下,请使用此代码段:

x = { "1234" => "5", "2345" => "6" }
y = {}

x.each do |key, value|
    y[key] = { "key_id" => key, "value_id" => value }
end