在Ruby哈希中查找重复项

时间:2013-08-14 02:53:42

标签: ruby arrays hash

我有一个哈希数组,我需要根据哈希值之间的一个匹配值来查找和存储匹配项。

a = [{:id => 1, :name => "Jim", :email => "jim@jim.jim"}, 
     {:id => 2, :name => "Paul", :email => "paul@paul.paul"}, 
     {:id => 3, :name => "Tom", :email => "tom@tom.tom"}, 
     {:id => 1, :name => "Jim", :email => "jim@jim.jim"}, 
     {:id => 5, :name => "Tom", :email => "tom@tom.tom"}, 
     {:id => 6, :name => "Jim", :email => "jim@jim.jim"}]

所以我想返回

b = [{:id => 1, :name => "Jim", :email => "jim@jim.jim"},  
     {:id => 3, :name => "Tom", :email => "tom@tom.tom"}, 
     {:id => 5, :name => "Tom", :email => "tom@tom.tom"}, 
     {:id => 6, :name => "Jim", :email => "jim@jim.jim"}]

注意:我可以在事实之后按:name对数据(csv)进行排序,这样它们就不必精确分组,只需准确。此外,它不必两个相同,可能是3或10或更多。

此外,数据大约是22,000行。

1 个答案:

答案 0 :(得分:14)

我对此进行了测试,它将完全符合您的要求:

b = a.group_by { |h| h[:name] }.values.select { |a| a.size > 1 }.flatten

但是,您可能希望查看该计算中生成的一些中间对象,看看它们对您是否更有用。