2013-11-05 56 views
5

我无法用传统的Ruby方法从数组user_list中删除所有重复的对象,从而达不到预期的结果。有没有一种聪明的方法来解决这个问题?Ruby从数组中删除重复的对象

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 
+2

'uniq'真的应该工作。你可以展示你测试它的步骤以及你的结果是什么?什么是用户数组中对象的类,以及它们的'=='运算符是如何定义的?这是Ruby on Rails吗? –

+0

你使用的是Rails 4还是Rails 3?哦,对,你是否使用铁轨?如果不是,什么是User类? – nzifnab

+2

嗨,大家好,这是一场虚惊!我用错误格式的数据调用了该方法。 users.uniq确实在工作!谢谢你的帮助。 – user2041343

回答

9

这个怎么样?

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

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

+0

这比他目前做的更有效率。还可以执行'User.where(user_id:user_list.map(&:user_id))',它将懒惰地执行数据库查询,并自动处理uniq。 – nzifnab

5
user_list.uniq! 

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

0

您还可以使用紧凑零移除目标为

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