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