このハッシュの配列をグループ化するにはどうすればよいでしょうか?
概要
このハッシュの配列があります:
- :name: Ben
:age: 18
- :name: David
:age: 19
- :name: Sam
:age: 18
年齢別にグループ化する必要があるので、次のようになります。
18:
- :name: Ben
:age: 18
- :name: Sam
:age: 18
19:
- :name: David
:age: 19
私はこのようにしてみました:
array = array.group_by &:age
しかし、このエラーが発生します:
NoMethodError (undefined method `age' for {:name=>"Ben", :age=>18}:Hash):
私の何が間違っているのでしょうか? Rails 3.0.1 と Ruby 1.9.2 を使用しています
解決策
&:age は、group_by メソッドが配列項目に対して age メソッドを呼び出して、データごとにグループを取得する必要があることを意味します。この age メソッドは、あなたのケースではハッシュであるアイテムには定義されていません。
これは機能するはずです:
array.group_by { |d| d[:age] }
新しい Ruby バージョンでは、次のショートカットも使用できます。
array.group_by { _1[:age] }
ここでの _1 は、#group_by メソッドに渡されるブロックの最初の位置引数を反映します。