假设我有一张桌子“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>]
实现目标的最优雅方式是什么?
答案 0 :(得分:2)
h = Foo.all.group_by { |x| x.bar }
h.each {|key, value| value.each {|foo| puts foo['bar'] }}
group_by
会返回一个哈希值,不是一个数组。但是,在很多情况下哈希比数组更好,所以我不认为它是一个缺点。