tusbasaのブログ

業務や勉強中に調べたことを自分用にメモするブログ

【ruby】group_by(&:itself)

group_byはブロック文の返り値毎にグループ分けを行う

names = %w(ruby python java c++ php javascript perl lisp haskell)
group = names.group_by do |name|
  name[0] # 先頭文字の種類によって分類
end

p group
{"r"=>["ruby"], "p"=>["python", "php", "perl"], "j"=>["java", "javascript"], "c"=>["c++"], "l"=>["lisp"], "h"=>["haskell"]}

&:はブロックによる繰り返し処理を行う。

array = ["1", "2", "3"]

以下の二つは同じ挙動をする
array.map {|n| n.to_i}
array.map(&:to_i)

group_by(&:itself)でブロック内での処理を行わずブロックに渡された値自身を返す。

ary = [1, 1, 1, 2, 3, 3]
p ary.group_by(&:itself)
{1=>[1, 1, 1], 2=>[2], 3=>[3, 3]}

参考 https://techacademy.jp/magazine/19771 http://simanman.hatenablog.com/entry/2013/03/16/193552