reduceIndexed
reduceRight
reduceRightIndexed
reduce
- inline fun <S, T : S> Iterable<T>.reduce(operation: (acc: S, T) -> S): S
2番目の要素から順番に、現在の蓄積値(acc)と要素の値に対して operation を実行し、結果を次の蓄積値(acc)とする
やっていることを for で書くとこんな感じ
- var acc = list[0]
- for (index in 1 until list.size) {
- acc = operation(acc, list[index])
- }
1回目 : acc = list[0] = 1, i = list[1] = 2
2回目 : acc = 1 + 2 = 3, i = list[2] = 3
3回目 : acc = 3 + 3 = 6, i = list[3] = 4
4回目 : acc = 6 + 4 = 10, i = list[4] = 5
戻り値 : 10 + 5 = 15
- val reduce = listOf(1, 2, 3, 4, 5).reduce { acc, i -> acc + i }
- println(reduce)
- val result = mutableListOf<Int>()
- listOf(1, 2, 3, 4, 5).reduce { acc, i ->
- result.add(i - acc)
- i
- }
- println(result) // [1, 1, 1, 1]
reduceIndexed
- fun <S, T : S> Iterable<T>.reduceIndexed(operation: (index: Int, acc: S, T) -> S): S
reduceRight
- fun <S, T : S> List<T>.reduceRight(operation: (T, acc: S) -> S): S
蓄積値(acc)の初期値が最後の要素の値で、最後から2番目の要素から戻る順番で operation が呼ばれる
↓ だと operation は 4回呼ばれ、
1回目 : acc = list[4] = 5, i = list[3] = 4
2回目 : acc = 5 + 4 = 9, i = list[2] = 3
3回目 : acc = 9 + 3 = 12, i = list[1] = 2
4回目 : acc = 12 + 2 = 14, i = list[0] = 1
戻り値 : 14 + 1 = 15
- val reduce = listOf(1, 2, 3, 4, 5).reduceRight { acc, i -> acc + i }
- println(reduce)
reduceRightIndexed
- fun <S, T : S> List<T>.reduceRightIndexed(operation: (index: Int, T, acc: S) -> S): S
0 件のコメント:
コメントを投稿