我有一个像这样的哈希:
[ { :lname => "Brown",:email => "james@intuit.com",:fname => "James" },{ :lname => nil,:email => "brad@intuit.com",:fname => nil },{ :lname => "Smith",:fname => "Brad" },:fname => nil } ]
我想学习如何做是如何删除记录,如果它是重复的.意思是看几个“brad@intuit.com”如何删除重复记录,意思是删除所有其他有电子邮件“brad@intuit.com”的其他人….使电子邮件不是其他的键字段?
解决方法
我知道这是一个旧的线程,但是Rails有一个名为“index_by”的“Enumerable”方法,在这种情况下可以很方便:
list = [ { :lname => "Brown",:fname => nil } ]
现在可以得到如下唯一的行:
list.index_by {|r| r[:email]}.values
合并具有相同电子邮件ID的行.
list.group_by{|r| r[:email]}.map do |k,v| v.inject({}) { |r,h| r.merge(h){ |key,o,n| o || n } } end
list.inject({}) do |r,h| (r[h[:email]] ||= {}).merge!(h){ |key,old,new| old || new } r end.values