我有一个哈希数组,我需要根据哈希值之间的一个匹配值来查找和存储匹配项。
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行。
答案 0 :(得分:14)
我对此进行了测试,它将完全符合您的要求:
b = a.group_by { |h| h[:name] }.values.select { |a| a.size > 1 }.flatten
但是,您可能希望查看该计算中生成的一些中间对象,看看它们对您是否更有用。