Функция mapIndexed
Функция mapIndexed применяет переданную функцию-преобразователь
к каждому элементу коллекции, предоставляя доступ к индексу элемента.
Возвращает новую коллекцию с результатами преобразования.
Работает с массивами Array, списками List,
множествами Set и другими типами коллекций.
Синтаксис
inline fun <T, R> Array<out T>.mapIndexed(
transform: (index: Int, T) -> R
): List<R>
inline fun <T, R> Iterable<T>.mapIndexed(
transform: (index: Int, T) -> R
): List<R>
inline fun <K, V, R> Map<out K, V>.mapIndexed(
transform: (index: Int, Entry<K, V>) -> R
): List<R>
Пример
Преобразуем массив чисел, добавив к каждому элементу его индекс:
val numbers = arrayOf(10, 20, 30, 40, 50)
val res = numbers.mapIndexed { index, value -> value + index }
println(res)
Результат выполнения кода:
List<Int> [10, 21, 32, 43, 54]
Пример
Создадим список строк с информацией о позиции каждого элемента:
val chars = listOf('a', 'b', 'c', 'd', 'e')
val res = chars.mapIndexed { index, char -> "Position $index: $char" }
println(res)
Результат выполнения кода:
List<String> ['Position 0: a', 'Position 1: b', 'Position 2: c', 'Position 3: d', 'Position 4: e']
Пример
Преобразуем множество, умножая каждый элемент на его индекс:
val nums = setOf(5, 10, 15, 20)
val res = nums.mapIndexed { index, num -> num * index }
println(res)
Результат выполнения кода:
List<Int> [0, 10, 30, 60]
Пример
Работа с картой Map - преобразуем записи с учетом индекса:
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
val res = map.mapIndexed { index, entry -> "${index + 1}. ${entry.key}=${entry.value}" }
println(res)
Результат выполнения кода:
List<String> ['1. a=1', '2. b=2', '3. c=3']
Пример
Использование условия с индексом - преобразуем только элементы с четными индексами:
val numbers = listOf(100, 200, 300, 400, 500)
val res = numbers.mapIndexed { index, value ->
if (index % 2 == 0) value * 2 else value
}
println(res)
Результат выполнения кода:
List<Int> [200, 200, 600, 400, 1000]
Смотрите также
-
функцию
map,
которая преобразует элементы без учета индекса -
функцию
forEachIndexed,
которая выполняет действие для каждого элемента с индексом