【问题标题】:Removing hashes that have identical values for particular keys删除对特定键具有相同值的哈希
【发布时间】:2013-05-03 08:42:41
【问题描述】:

我有一个 ArrayHashes 具有相同的密钥,用于存储人们的数据。

我想删除键 :name:surname 具有相同值的哈希值。其余值可能不同,因此在数组上调用 uniq! 将不起作用。

有没有简单的解决方案?

【问题讨论】:

    标签: ruby hash uniq


    【解决方案1】:

    您可以将一个块传递给uniquniq!,块返回的值用于比较两个条目是否相等:

    irb> people = [{name: 'foo', surname: 'bar', age: 10}, 
                   {name: 'foo', surname: 'bar' age: 11}]
    irb> people.uniq { |p| [p[:name], p[:surname]] }
     => [{:name=>"foo", :surname=>"bar", :age=>10}]
    

    【讨论】:

      【解决方案2】:
      arr=[{name: 'john', surname: 'smith', phone:123456789},
           {name: 'thomas', surname: 'hardy', phone: 671234992},
           {name: 'john', surname: 'smith', phone: 666777888}]
      # [{:name=>"john", :surname=>"smith", :phone=>123456789},
      #  {:name=>"thomas", :surname=>"hardy", :phone=>671234992},
      #  {:name=>"john", :surname=>"smith", :phone=>666777888}]
      
       arr.uniq {|h| [h[:name], h[:surname]]}
      # [{:name=>"john", :surname=>"smith", :phone=>123456789}, 
      #  {:name=>"thomas", :surname=>"hardy", :phone=>671234992}]
      

      【讨论】:

      • 我认为这只会使姓氏唯一。你想要+,而不是块内的&&。实际上,您可能想构造一个数组进行比较。
      • carol adams 和 carola dams 不高兴。
      • @steenslag 希望他们现在开心;)
      【解决方案3】:
      unique_people = {}
      person_array.each do |person|
        unique_people["#{person[:name]} #{person[:surname]}"] = person
      end
      
      array_of_unique_people = unique_people.values
      

      这应该可以解决问题。

      【讨论】:

        【解决方案4】:
        a.delete_if do |h|
          a.select{|i| i[:name] == h[:name] and i[:surname] == h[:surname] }.count > 1
        end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-11-13
          • 2011-10-04
          • 1970-01-01
          • 1970-01-01
          • 2015-03-16
          • 2014-06-05
          • 1970-01-01
          相关资源
          最近更新 更多