気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Ruby Enumerableモジュール

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]]