我有散列與整個陣列不同的密鑰數組:查找鍵
csv = [{:fruit=>"apple", :number=>23},{:age=>12,:name=>"XYZ"}]
我如何獲得這樣所有的按鍵:
[:fruit,:number,:age,:name]
我試過
array = csv.collect {|key,value| key }
我有散列與整個陣列不同的密鑰數組:查找鍵
csv = [{:fruit=>"apple", :number=>23},{:age=>12,:name=>"XYZ"}]
我如何獲得這樣所有的按鍵:
[:fruit,:number,:age,:name]
我試過
array = csv.collect {|key,value| key }
csv.reduce(&:merge).keys
#=> [:fruit, :number, :age, :name]
只是說'
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]
也許更好'csv.flat_map(&:keys).uniq' –
@LukasBaliak,是的,你可以使用'&:keys'簡寫。 –
沒有括號或管道:
csv.flat_map(&:keys).uniq
或:
csv.map(&:keys).flatten.uniq
雖然我總是欣賞一個綠黨,在這種情況下,我不配得到它,因爲我的解決方案比獲得唯一密鑰需要做更多的工作。 (因此,「只是說」)我建議你重新考慮你的選擇。但是,請注意,如果沒有'.keys',這是將哈希數組轉換爲哈希(至少在重複鍵不成問題時)的一種好方法。 –