我有散列的數組:如何將散列數組轉換爲散列值數組?
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}]
我怎樣才能將其轉換爲數值數組:
["male", "male", "female"]
我有散列的數組:如何將散列數組轉換爲散列值數組?
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}]
我怎樣才能將其轉換爲數值數組:
["male", "male", "female"]
的通用方法這一點,會考慮到其他可能的密鑰:
list = [{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}]
# Collect the 'sex' key of each hash item in the list.
sexes = list.collect { |e| e['sex'] }
arr = [{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}]
arr.map(&:values).flatten
編輯:作爲導演@tadman。謝謝!
有沒有必要就地扁平化的一箇中間值。 「扁平化」將完成這項工作。 – tadman 2013-05-01 17:33:22
@tadman右鍵。 :)我只是考慮它,因爲AdamNYC希望將它們保留在同一個陣列中。 – kiddorails 2013-05-01 17:39:09
'flatten!'調用只會影響'map'操作的結果,並不會修改'arr'。 – tadman 2013-05-01 17:43:35
在這種情況下,
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].map(&:values).flatten
應該工作。
它從每個散列獲取一個數組,然後將嵌套數組展平。
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].flat_map(&:values)
你可以在「地圖」內部數組中的元素,取散列值,它們「平坦化」結果數組。
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].map{|h| h.values }
=> [["male"], ["male"], ["female"]]
[["male"], ["male"], ["female"]].flatten
=> ["male", "male", "female"]
在一個單一的線,你可以:
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].map{|h| h.values }.flatten
或:
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].map(&:values).flatten
文檔:
我喜歡這種方法,以防萬一有更多的鍵比所需的。 +1 – squiguy 2013-05-01 17:36:49