2009-06-10 79 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"} 
相關問題