rubyの繰り返し処理として有名なのが、eachメソッドですが、必ずしもeachが最善という訳ではなかったりします。
あるパターンの時は、違うメソッドを使った方が簡略化して、実装できる場合があります。
今回は、パターン別で、簡略化する書き方をご紹介します。
すでにある配列から、要素を変化させた新たな配列を作成する時
map
メソッドを使っていきます。
演算子を使っての変化
# eachの場合list=(1..5).to_alist_double=[]list.eachdo|i|list_doubule<<i*2endplist_double# [2, 4, 6, 8, 10]
# mapの場合list=(1..5).to_alist_double=list.map{|i|i*2}plist_double# [2, 4, 6, 8, 10]
インスタンスメソッドを使っての変化
# eachの場合array=["a","b","c"]array_up=[]array.eachdo|i|array_up<<i.upcaseendparray_up# ["A", "B", "C"]
# mapの場合array=["a","b","c"]array_up=array.map(&:upcase)parray_up# ["A", "B", "C"]
.map{ |i| i.upcase }
をさらに省略させている
配列の要素(数字)の合計を求める時
inject(初期値)
メソッドを使っていきます。
# eachの場合list=(1..5).to_asum=0list.eachdo|i|sum+=iendpsum# 15
# injectの場合list=(1..5).to_asum=list.inject(0){|i,j|i+=j}psum# 15