5

使用传统的 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

4 回答 4

11

这个怎么样?

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

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

于 2013-11-05T04:27:16.807 回答
7
user_list.uniq! 

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

于 2013-11-05T08:27:14.237 回答
0

您还可以使用 compact 来删除 nil 对象

MainMenu.first.second_sale_elements.each.map(&:sale_structure).compact.uniq
于 2014-09-16T18:37:30.623 回答
0

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

红宝石独特!文件

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

于 2018-11-20T15:13:49.440 回答