Как получить индекс в каждом цикле? Я хочу печатать числа для каждой второй итерации

Например

for (value in collection) {
    if (iteration_no % 2) {
        //do something
    }
}

В java у нас традиционный цикл for

for (int i = 0; i < collection.length; i++)

Как получить i?

Audi

Ответов: 7

Ответы (7)

В дополнение к решениям, предоставляемым @Audi, есть также forEachIndexed:

collection.forEachIndexed { index, element ->
    // ...
}

В качестве альтернативы вы можете использовать withIndex библиотечную функцию:

for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

Поток управления: если, когда, для, пока: https://kotlinlang.org/docs/reference/control-flow.html

Рабочий пример forEachIndexed в Android

Итерация с индексом

itemList.forEachIndexed{index, item -> 
println("index = $index, item = $item ")
}

Обновить список с использованием индекса

itemList.forEachIndexed{ index, item -> item.isSelected= position==index}

Диапазоны также приводят к читаемому коду в таких ситуациях:

(0 until collection.size step 2)
    .map(collection::get)
    .forEach(::println)

попробуйте это; для цикла

for ((i, item) in arrayList.withIndex()) { }

Используйте индексы

for (i in array.indices) {
    print(array[i])
}

Если вы хотите значение, а также индекс, используйте withIndex ()

for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

Справка: Управление потоком в котлине

Кажется, что вы действительно ищете filterIndexed

Например:

listOf("a", "b", "c", "d")
    .filterIndexed { index, _ ->  index % 2 != 0 }
    .forEach { println(it) }

Результат:

b
d

2022 WebDevInsider