Ruby

2016-06-26, ruby

reduceを活用する

injectの別名で使い方は同じです。eachを使って普通に走査する処理でもまあ良いんですけれど。…むしろ慣れてて読み易い?

sum = 0
(1..10).each { |i| sum += i }
sum #=> 55

reduceを使って書くとこんな感じになります。

irb(main):001:0> (1..10).reduce(:+)
=> 55

ブロックを引数にするともう少し色々出来ます。最初だけ1番目の引数に要素の先頭の値が入って、2つ目以降は手前のブロックの戻り値が渡されるところが肝でしょうか。

irb(main):002:0> (1..10).reduce { |i,j| puts "#{i},#{j}"; i+j }
1,2
3,3
6,4
10,5
15,6
21,7
28,8
36,9
45,10
=> 55

参考URL

この記事は役に立ちましたか?