チェリー本を参考にした。このあたりよく忘れるのでメモっておく
each
普通のfor文と同じ役割
num = [1,2,3,4]
sum = 0
num.each do |n|
sum += n
end
print sum #=> 10
each_with_index
eachについて配列のインデックスも扱うことができる
num = [1,2,3,4]
num.each_with_index do |i,n|
p "#{i}:#{n}"
end
# 出力は以下の通り
# 0:1
# 1:2
# 2:3
# 3:4
map
ある配列の要素に対する処理結果を別配列に返す
num = [1,2,3,4]
new_num = []
new_num = num.map do |n|
n * 10
end
print new_num #=> [10,20,30,40]
エイリアスメソッドであるcollectも同様の使い方が可能
select/find_all
ある配列の要素について、条件に一致しているものを返す
num = [1,2,3,4]
new_num = num.select do |n|
n.odd? #nが奇数のものをnew_numへ格納
end
print new_num #=> [1,3]
エイリアスメソッドであるfind_allも同様の使い方が可能
reject
ある配列の要素について、条件に一致していないものを返す
要するにselect/find_allの反対
num = [1,2,3,4]
new_num = num.select do |n|
n.odd? #nが奇数でないものをnew_numへ格納
end
print new_num #=> [2,4]
find/detect
ある配列について、戻り値が真かつ最初の要素を返す
num = [1,2,3,4]
new_num = num.find do |n|
n.odd?
end
print new_num #=> 3
エイリアスメソッドであるdetectも同様の使い方が可能
inject/reduce
ある値を初期値として配列各要素を足しこむ。eachの拡張か。
num = [1,2,3,4]
sum = num.inject(0) do |result,n|
result += n #初期値0に各要素をすべて足しこむ。初期値が異なれば結果も異なる。
end
print sum #=> 10
当然ながら文字列の結合処理にも利用可能
エイリアスメソッドであるreduceも同様の使い方が可能
その他
map/collectとinject/reduceの思想の違いらしい。エイリアスというくらいなので多分map処理を名前変えてcollectとかしてんだろうな。要するに実装上の違いはないと思うがどうなのか。。。
https://magazine.rubyist.net/articles/0038/0038-MapAndCollect.html#map-%E3%81%A8-collect-%E3%81%AE%E7%99%BA%E6%83%B3%E3%81%AE%E9%81%95%E3%81%84