/Kotlin

# foldIndexed

```inline fun <T, R> Array<out T>.foldIndexed(
initial: R,
operation: (index: Int, acc: R, T) -> R
): R```
```inline fun <R> ByteArray.foldIndexed(
initial: R,
operation: (index: Int, acc: R, Byte) -> R
): R```
```inline fun <R> ShortArray.foldIndexed(
initial: R,
operation: (index: Int, acc: R, Short) -> R
): R```
```inline fun <R> IntArray.foldIndexed(
initial: R,
operation: (index: Int, acc: R, Int) -> R
): R```
```inline fun <R> LongArray.foldIndexed(
initial: R,
operation: (index: Int, acc: R, Long) -> R
): R```
```inline fun <R> FloatArray.foldIndexed(
initial: R,
operation: (index: Int, acc: R, Float) -> R
): R```
```inline fun <R> DoubleArray.foldIndexed(
initial: R,
operation: (index: Int, acc: R, Double) -> R
): R```
```inline fun <R> BooleanArray.foldIndexed(
initial: R,
operation: (index: Int, acc: R, Boolean) -> R
): R```
```inline fun <R> CharArray.foldIndexed(
initial: R,
operation: (index: Int, acc: R, Char) -> R
): R```

Accumulates value starting with initial value and applying operation from left to right to current accumulator value and each element with its index in the original array.

## Parameters

`operation` - function that takes the index of an element, current accumulator value and the element itself, and calculates the next accumulator value.

```inline fun <T, R> Iterable<T>.foldIndexed(
initial: R,
operation: (index: Int, acc: R, T) -> R
): R```

Accumulates value starting with initial value and applying operation from left to right to current accumulator value and each element with its index in the original collection.

## Parameters

`operation` - function that takes the index of an element, current accumulator value and the element itself, and calculates the next accumulator value.