加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读