#使いどころ
配列内の要素の合計値を求めるときなどに使います(実際のプロジェクトでreduceを見かけるのはほとんどこのパターンな気がします)。
では要素内の合計値の求め方を例にreduceの処理の流れを見ていきます。
let array = [1, 2, 3, 4, 5]
let result = array.reduce(0) { $0 + $1 }
print(result) // 15
reduceでは{ }
の中身の処理が要素の数だけ繰り返されます。
###1周目
まず1周目ですが、$0
にはreduce呼び出しの第一引数で指定した0
が代入されます。一方、$1
には配列の要素が順番に代入されていくので、この1周目では1
が代入されます。したがって、{ }
の中では0 + 1
の結果である1
が得られます。
###2周目
1周目の結果として得られた1
が、2周目の$0
に代入されます。つまり2周目以降は、前回の周で得られた結果が$0
に代入されることになります。そして、$1
は配列の要素が順番に代入されるので、今回は配列の2つ目の要素である2
が代入されます。よって、1 + 2
の計算が行われ、3
が得られます。
###3周目
あとはこれの繰り返しになります。2周目の結果として得られた3
が3周目の$0
に、そして配列の要素の3番目である3
が$1
に代入されます。3 + 3
で6
が結果として得られます。
###4周目
6 + 4
で10
になります。
###5周目
10 + 5
で15
になります。そして、これで配列にあるすべての要素の処理が終わったので、resultには15
が代入されます。
##最後に
今回は例として{ }
の中で足し算の処理をしましたが、他には掛け算、あるいは文字列の結合などにも使えます。いずれにしても上記の処理の流れがわかっていれば応用が効く思うのでいろいろ試してみてください。
##ちなみに
僕は新しく知ったことを実際にコードで確かめたい時にはpaiza.ioをよく使っています。ちょっとしたアウトプットをするときなどに重宝しています。