ruby-on-rails – 如何在Ruby on Rails中删除哈希中的重复项?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何在Ruby on Rails中删除哈希中的重复项?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个像这样的哈希:
[
  {
    :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

猜你在找的Ruby相关文章