配列(リスト)の要素をグルーピングするには (group_by / groupBy) 2015/03/27
値を関数に渡して、その結果をキーとし、同じ結果になった値を集めた配列を値とする連想配列(マップ)を作る、各プログラミング言語での方法。
たとえば、[10, 20, 30, 40, 50]
という配列があって、30で割った余りを求める関数があったとすると、値を関数に渡した結果は、
10 -> 10
20 -> 20
30 -> 0
40 -> 10
50 -> 20
のようになる。これをもとに
{0 => [30], 10 => [10, 40], 20 => [20, 50]}
というような連想配列を作りたいとする。
関連
Scala 2015/01/15
Signature:
例
val lst = List(10, 20, 30, 40, 50);
val grouped = lst.groupBy(_ % 30);
println(grouped);
// => Map(20 -> List(20, 50), 10 -> List(10, 40), 0 -> List(30))
Ruby / JRuby 2015/03/27
group_by
というメソッドにブロックを渡して使う。
arr = [10, 20, 30, 40, 50]
grouped = arr.group_by {|elem| elem % 30}
p grouped
# => {10=>[10, 40], 20=>[20, 50], 0=>[30]}
Enumerable#group_by
| Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Enumerable/i/group_by.html