我有一系列管理员用户。
然而,有重复的用户。
我想将它们分组,以便数组中每个用户只有一个实例。
最好的方法是什么?
@managers.sort_by{|obj| obj.id} # Just sorted the data but did not eliminate duplicats
@managers.group_by{|u|u.name} # just created a bunch of arrays for each name
答案 0 :(得分:6)
使用uniq
方法,该方法返回一个删除了重复项的新数组。
@managers.uniq
答案 1 :(得分:1)
如果重复表示相同的对象ID,则可以执行以下操作:
@managers.uniq.group_by(&:name)
答案 2 :(得分:1)
过滤阵列感觉就像修复症状一样。为什么阵列首先包含垃圾?
我建议在manager?
模型中添加User
方法,如果用户是经理,则返回true。然后你可以像
@managers = User.select &:manager?
并获取一个仅包含管理器的数组。
答案 3 :(得分:1)
你也可以
Manager.select('DISTINCT user_id')
首先获得一个干净的阵列,性能更好。