【问题标题】:Finding keys of an array of hash查找哈希数组的键
【发布时间】: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 }

【问题讨论】:

    标签: arrays ruby key


    【解决方案1】:

    尝试将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]
    

    【讨论】:

    • @LukasBaliak,是的,您可以使用 &:keys 速记。
    【解决方案2】:
    csv.reduce(&:merge).keys
      #=> [:fruit, :number, :age, :name]
    

    只是说说

    【讨论】:

    • 虽然我一直很欣赏一个新手,但在这种情况下我不应该得到它,因为我的解决方案所做的工作比获取唯一密钥所需的工作更多。 (因此,“只是说”。)我建议您重新考虑您的选择。但是请注意,如果没有.keys,这是将散列数组转换为散列的好方法(至少在重复键不成问题时)。
    【解决方案3】:

    没有大括号或管道:

    csv.flat_map(&:keys).uniq
    

    或:

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

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多