2013-05-01 198 views

回答

2

的通用方法這一點,會考慮到其他可能的密鑰:

list = [{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}] 

# Collect the 'sex' key of each hash item in the list. 
sexes = list.collect { |e| e['sex'] } 
+0

我喜歡這種方法,以防萬一有更多的鍵比所需的。 +1 – squiguy 2013-05-01 17:36:49

2
arr = [{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}] 
arr.map(&:values).flatten 

編輯:作爲導演@tadman。謝謝!

+2

有沒有必要就地扁平化的一箇中間值。 「扁平化」將完成這項工作。 – tadman 2013-05-01 17:33:22

+0

@tadman右鍵。 :)我只是考慮它,因爲AdamNYC希望將它們保留在同一個陣列中。 – kiddorails 2013-05-01 17:39:09

+0

'flatten!'調用只會影響'map'操作的結果,並不會修改'arr'。 – tadman 2013-05-01 17:43:35

4

在這種情況下,

[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].map(&:values).flatten 

應該工作。

它從每個散列獲取一個數組,然後將嵌套數組展平。

4
[{"sex"=>"male"}, {"sex"=>"male"}, {"sex"=>"female"}].flat_map(&:values) 
-2
arr = Array.new 
    my_hash.each do |el| 
     #collect them here... 
     arr.push(el["sex"]); 
    end 

希望它可以幫助

+1

這不會轉換,它只是打印。你已經忽略了這個關鍵部分。不是一個真正的答案,是嗎? – tadman 2013-05-01 17:33:54

+1

我確實寫了他要收集它們的地方......所以這裏更正了 謝謝 – lrl 2013-05-01 17:38:05

+1

還有其他幾個答案提供了這個功能。這個非答案應該被刪除。 – tadman 2013-05-01 17:44:42

1

你可以在「地圖」內部數組中的元素,取散列值,它們「平坦化」結果數組。

[{"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 

文檔:

+3

-1用於在發佈相同解決方案的答案後12分鐘提出答案。 – sawa 2013-05-01 17:41:29

+1

它更徹底,但是這個確切的解決方案已經發布了三次。與晚會時尚不同,這只是多餘的。 – tadman 2013-05-01 17:44:13

+0

對不起,我不知道這是一場比賽。我是否應該快速寫照明以便下次獲得積分?我試圖給出一個很好的答案,包括搜索別的東西。對不起,如果我不夠快。 – 2013-05-01 17:49:15