ActiveRecord - 将具有相同值的记录分组

时间:2013-07-28 16:01:06

标签: ruby-on-rails-3.2 rails-activerecord

假设我有一张桌子“foo”。它有一个列“bar”。 bar的类型是整数,但 我不知道预先有多少值

我想根据bar的值对记录进行分组。具有相同“bar”值的记录应包含在数组中。所有这些数组都应该包含在另一个数组中。

我想做的是

Foo.all
=> [#<Foo id: 1, bar: 1>, #<Foo id: 2, bar: 1>, #<Foo id: 3, bar: 2>, #<Foo id: 4, bar: 3>]
Foo.group_records_with_the_same_value("bar")
=> [[#<Foo id: 1, bar: 1>, #<Foo id: 2, bar: 1>], [#<Foo id: 3, bar: 2>], [#<Foo id: 4, bar: 3>]

实现目标的最优雅方式是什么?

1 个答案:

答案 0 :(得分:2)

使用Enumerable#group_by

h = Foo.all.group_by { |x| x.bar }
h.each {|key, value| value.each {|foo| puts foo['bar'] }}

group_by会返回一个哈希值,不是一个数组。但是,在很多情况下哈希比数组更好,所以我不认为它是一个缺点。

相关问题