【发布时间】:2016-03-02 07:55:19
【问题描述】:
我有一个散列数组,数组中有不同的键:
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.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]
【讨论】:
&:keys 速记。
csv.reduce(&:merge).keys
#=> [:fruit, :number, :age, :name]
只是说说
【讨论】:
.keys,这是将散列数组转换为散列的好方法(至少在重复键不成问题时)。
没有大括号或管道:
csv.flat_map(&:keys).uniq
或:
csv.map(&:keys).flatten.uniq
【讨论】: