6

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

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"}]

注意:我可以事后对数据(csv)进行排序,:name这样它们就不必很好地分组,只要准确即可。也不必两个相同,可以是 3 个或 10 个或更多。

此外,数据约为 22,000 行。

4

1 回答 1

14

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

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

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

于 2013-08-14T02:59:45.383 回答