我无法使用传统的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
答案 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。