2016-03-02 38 views
0

我有散列與整個陣列不同的密鑰數組:查找鍵

csv = [{:fruit=>"apple", :number=>23},{:age=>12,:name=>"XYZ"}] 

我如何獲得這樣所有的按鍵:

[:fruit,:number,:age,:name] 

我試過

array = csv.collect {|key,value| key } 

回答

3
csv.reduce(&:merge).keys 
    #=> [:fruit, :number, :age, :name] 

只是說'

+0

雖然我總是欣賞一個綠黨,在這種情況下,我不配得到它,因爲我的解決方案比獲得唯一密鑰需要做更多的工作。 (因此,「只是說」)我建議你重新考慮你的選擇。但是,請注意,如果沒有'.keys',這是將哈希數組轉換爲哈希(至少在重複鍵不成問題時)的一種好方法。 –

5

嘗試使用flat_mapkeys

csv.flat_map { |a| a.keys } 
# => [:fruit, :number, :age, :name] 

如果有一些按鍵的多個實例,並且希望讓每個按鍵只有一次,你還應該添加uniq

csv = [{:fruit=>"apple", :number=>23},{:age=>12,:name=>"XYZ", :number=>11}] 
array = csv.flat_map { |a| a.keys } 
# => [:fruit, :number, :age, :name, :number] 
array.uniq 
# => [:fruit, :number, :age, :name] 
+2

也許更好'csv.flat_map(&:keys).uniq' –

+0

@LukasBaliak,是的,你可以使用'&:keys'簡寫。 –

0

沒有括號或管道:

csv.flat_map(&:keys).uniq 

或:

csv.map(&:keys).flatten.uniq