配列(リスト)の要素をグルーピングするには (group_by / groupBy)

値を関数に渡して、その結果をキーとし、同じ結果になった値を集めた配列を値とする連想配列(マップ)を作る、各プログラミング言語での方法。

たとえば、[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

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

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

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク