1

假设我有一张桌子“foo”。它有一列“栏”。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>]

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

4

1 回答 1

3

使用Enumerable#group_by

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

group_by将返回一个哈希,而不是一个数组。但是,hash 在很多情况下都比数组好,所以我不认为这是一个缺点。

于 2013-07-29T07:13:30.913 回答