1

テーブル「foo」があるとしましょう。列「バー」があります。バーの型は整数ですが、事前にいくつの値があるかわかりません

の値に従ってレコードをグループ化したい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配列ではなくハッシュを返します。ただし、ハッシュは多くの状況で配列よりも優れているため、不利ではないと思います。

于 2013-07-29T07:13:30.913 に答える