Ruby从数组中删除重复的对象

时间:2013-11-05 04:20:20

标签: ruby

我无法使用传统的Ruby方法从下面的数组user_list中删除所有重复的对象。有没有一种聪明的方法来解决这个问题?

users = []
user_list.each do |u|
    user = User.find_by_id(u.user_id)
    users << user
    #users << user unless users.include?(user)  # does not work
end
#users = users.uniq  # does not work

4 个答案:

答案 0 :(得分:9)

这个怎么样?

users = User.find(user_list.map(&:user_id).uniq)

这具有一个数据库调用而不是user_list.size数据库调用的额外好处。

答案 1 :(得分:5)

user_list.uniq! 

这应删除所有重复值并将唯一值保留在user_list中。 我希望这就是你要找的东西。

答案 2 :(得分:0)

您也可以使用compact删除nil对象

MainMenu.first.second_sale_elements.each.map(&:sale_structure).compact.uniq

答案 3 :(得分:0)

user_list.uniq!谢谢,但是请记住uniq!如果没有重复项,将返回nil对象,因此,如果您没有使用uniq cuz的验证器,它将返回一个新数组。

  

Ruby uniq!文档

     
    

如果未进行任何更改(即未找到重复项),则返回nil。