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

Wie kann ich einen neuen Hash mit den Schlüsseln und Werten in der Seite erstellen? Wie so:Wie kann ich einfach einen Hash in einen neuen zusammenführen?

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

Wahrscheinlich für einige WSDL-Schnittstelle zu SugarCRM, Amirit? –

Antwort

6

Was versuchen Sie eigentlich mit diesem zu erreichen? Wenn Sie schauen, alle Schlüssel iterieren, können Sie .keys verwenden:

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

Wenn Sie wollen einfach nur ein Array von Hashes erstellen, sollten Sie in der Lage sein, über die Tasten iterieren:

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

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

Sie können Schleife durch jedes Paar der ursprünglichen Hash und bauen ein Array von Hashes up:

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

Wird Ausbeute:

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

Was sollten die Schlüssel für den abgeleiteten Hash sein, der gleiche wie im Original? In diesem Fall wird dieser Code-Schnipsel verwenden:

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

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

Mit „Fusion“ zwei Hashes, ich glaube, Sie alle Inhalte von zwei verschiedenen Hashes in einen neuen Hash zu setzen bedeutet. Da die Schlüssel eines Hashs eindeutig sein müssen, kann, wenn in beiden Quell-Hashwerten derselbe Schlüssel vorhanden ist, nur ein Wert überleben.

In diesem Beispiel füge ich den Inhalt von Hash x und Hash y in Hash z zusammen. Die Werte in y überschreiben die Werte in z, wenn doppelte Schlüssel vorhanden sind.

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 

Die Quell-Hashes hatten insgesamt 6 Schlüssel. Da der Schlüssel "c" in beiden Hasen war, hat der Misch-Hash nur 5 Schlüssel.

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