2009-06-10 44 views
2
I have a simple hash like so { "1234" => "5", "2345" => "6" } 

我该如何创建一个新的哈希键和值都在它呢?像这样:我该如何简单地将散列合并为一个新散列?

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

可能对于SugarCRM的某些WSDL接口,amirite? – 2009-06-12 03:21:19

回答

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} 
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"}] 
0

派生散列的键应该是什么,原来的一样?在这种情况下使用这个片段:

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

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

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

在这个例子中,我将散列x和散列y的内容合并到散列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"} 
相关问题