概要
Enumerable#group_by
詳細
Enumerable#group_by 各要素をブロックで呼び出し、その結果でグループ分けを行う
サンプル
コード
# encoding: utf-8 require "pp" class Fixnum def fizz? self % 3 == 0 end def buzz? self % 5 == 0 end def fizz_buzz? self % 15 == 0 end end list = [] 30.times {|i|list << i + 1} p list list = list.group_by do |e| if e.fizz_buzz? "fizzbuzz" elsif e.fizz? "fizz" elsif e.buzz? "buzz" else "other" end end p list
出力
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30] {"other"=>[1, 2, 4, 7, 8, 11, 13, 14, 16, 17, 19, 22, 23, 26, 28, 29], "fizz"=>[3, 6, 9, 12, 18, 21, 24, 27], "buzz"=>[5, 10, 20, 25], "fizzbuzz"=>[15, 30]}