ruby-on-rails – 如何在Ruby on Rails中删除哈希中的重复项?
发布时间:2020-12-16 20:01:27 所属栏目:百科 来源:网络整理
导读:我有一个像这样的哈希: [ { :lname = "Brown",:email = "james@intuit.com",:fname = "James" },{ :lname = nil,:email = "brad@intuit.com",:fname = nil },{ :lname = "Smith",:fname = "Brad" },:fname = nil }] 我想学习如何做是如何删除记录,如果它是
我有一个像这样的哈希:
[ { :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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |