如何在数组Ruby中对对象进行分组

时间:2011-09-09 11:09:02

标签: ruby ruby-on-rails-3

我有一系列管理员用户。

然而,有重复的用户。

我想将它们分组,以便数组中每个用户只有一个实例。

最好的方法是什么?

@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

4 个答案:

答案 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')

首先获得一个干净的阵列,性能更好。