2012-07-06 45 views
0

轉換一個哈希數組我是相當新的Ruby和我有一個哈希看起來像這樣:紅寶石

{ ["key1", "key2"] => 5, ["key1", "key3"] => 2, ... } 

,我想將它轉化成一個數組,看起來像

[ ["key1", "key2", 5], ["key1", "key3", 2] ... ] 

我該怎麼做呢?

回答

3

簡單:

hash.collect{|k, v| k << v} 

,如果你需要原始哈希不變:

hash.collect{|k, v| k + [v]} 
+1

你的第一個(或該版本的吧'地圖{| K,V | K + [V]}')沒有裂傷原哈希的鍵。 – 2012-07-06 07:56:29

+0

是的,正確的,加上兩個答案,以防他需要散列。 :) – Matzi 2012-07-06 07:59:54

+1

挑剔:變量命名*非常*重要。如果你寫'k'你說的是「單數/單項」。如果寫'ks'你說的是「複數/集合」。 – tokland 2012-07-06 08:00:12

-1

to_a正是這麼做的。

{ ["key1", "key2"] => 5, ["key1", "key3"] => 2}.to_a 
+0

不,看看所需的輸出:'[[「key1」,「key2」,5],[「key1」,「key3」,2] ...]'。 – tokland 2012-07-06 09:32:51

2

另一種方式可以是:

hash.map(&:flatten) 
# => [["key1", "key2", 5], ["key1", "key3", 2]]