Enumerableモジュールとは?
- Arrayクラス、Hashクラスなどにインクルードされているモジュール
- すべてのメソッドがeachを元に作られている
代表的で忘れやすいものを以下に記載する。
map,collectメソッド
['a','b','c'].map{|i| i.upcase} => ["A", "B", "C"]
each_with_indexメソッド
インデックスが欲しい場合は以下を使用する。
[:a, :b, :c].each_with_index{|v, i| puts "#{v} => #{i}"} a => 0 b => 1 c => 2 => [:a, :b, :c]
injectメソッド
一般的な書き方
ary.inject(init) { |result, element| resultとelementを使った処理} [5, 9, 3].inject(0) { |sum, num| sum > num ? sum : num } #=> 9
ブロックなしの書き方
ary.inject(init, :[sym]) # symは+や*のなどの演算子 ## 下記と等価 ary.inject(init) { |result, i| result [sym]= i } # 具体的には [1, 2, 3].inject(0, :+) # => 6 [1, 2, 3].inject(:+) # => 6 初期値も省略可能。もはや何を書いているかぱっとはわからないw
group_byメソッド
ブロックの評価結果をKeyとし、同じキーを持つ要素を配列としたハッシュを返却
(1..5).group_by{|v| v % 2} => {1=>[1, 3, 5], 0=>[2, 4]}
zipメソッド
自身と、引数の配列より1つずつ要素を取り出して配列を作成。それを要素とする配列を返却
[1,2,3].zip([4,5,6],[7,8,9]) => [[1, 4, 7], [2, 5, 8], [3, 6, 9]]