我有兩個散列:合併兩個哈希有交替的紅寶石(爲2.xx)
h1 = {'a' => 33, 'b' => 4, 'c' => 6}
h2 = {'d' => 10, 'e' => 1, 'f' => 12}
現在他們應該合併爲一個,與交替,所以最終的哈希應該是這樣的:
{'a' => 33, 'd' => 10, 'b' => 4, 'e' = 1, 'c' => 6, 'f' => 12}
這樣做的最好方法是什麼。大概是一個單一的班輪?
謝謝!
我有兩個散列:合併兩個哈希有交替的紅寶石(爲2.xx)
h1 = {'a' => 33, 'b' => 4, 'c' => 6}
h2 = {'d' => 10, 'e' => 1, 'f' => 12}
現在他們應該合併爲一個,與交替,所以最終的哈希應該是這樣的:
{'a' => 33, 'd' => 10, 'b' => 4, 'e' = 1, 'c' => 6, 'f' => 12}
這樣做的最好方法是什麼。大概是一個單一的班輪?
謝謝!
這裏是我的嘗試
Hash[*[h1.to_a, h2.to_a].transpose.flatten]
# => {"a"=>33, "d"=>10, "b"=>4, "e"=>1, "c"=>6, "f"=>12}
# or
Hash[*h1.to_a.zip(h2.to_a).flatten]
# => {"a"=>33, "d"=>10, "b"=>4, "e"=>1, "c"=>6, "f"=>12}
即使多顆。 :-)
Hash[*[*h1, *h2].transpose.flatten]
# => {"a"=>"b", "c"=>"d", "e"=>"f", 33=>4, 6=>10, 1=>12}
沒有星星!
h1 = {'a' => 33, 'b' => 4, 'c' => 6}
h2 = {'d' => 10, 'e' => 1, 'f' => 12}
h1.to_a.zip(h2.to_a).flatten(1).to_h
#=> {"a"=>33, "d"=>10, "b"=>4, "e"=>1, "c"=>6, "f"=>12}
對於Ruby版本< 2.0:
Hash[h1.to_a.zip(h2.to_a).flatten(1)]
注Array#transpose和Enumerable#zip操作數組時總是可互換的。
對於Ruby版本< 1.9,沒有指定散列中的鍵/值對的排序。對於這些版本,最接近你能來回答你的問題是提供鍵的期望排序:
keys_in_order = ['a', 'd', 'b', 'e', 'c', 'f']
檢索相關的值:
values = h1.merge(h2).values_at(*keys_in_order)
#=> [33, 10, 4, 1, 6, 12]
和配對這些與zip
:
keys_in_order.zip(values)
#=> [["a", 33], ["d", 10], ["b", 4], ["e", 1], ["c", 6], ["f", 12]]
'flatten'需要參數..我忘了:-(感謝幫助記住它。 –
排序的邏輯是什麼? –
邏輯是:先從第一個散列開始,然後從第二個散列開始;然後從第一個散列第二個,第二個從第二個散列。等等,只是他們已經在h1和h2 –
順序他們已經是一個接一個我認爲@ArupRakshit意味着爲什麼他們需要按照特定的順序,因爲你可以通過密鑰訪問任何東西,而不知道它在什麼位置。 –