Jak uzyskać indeks w każdej pętli? Chcę wydrukować liczby dla każdej drugiej iteracji
Na przykład
for (value in collection) {
if (iteration_no % 2) {
//do something
}
}
W javie mamy tradycyjną pętlę for
for (int i = 0; i < collection.length; i++)
Jak zdobyć i
?
Odpowiedzi:
Oprócz rozwiązań dostarczonych przez @Audi dostępne są również
forEachIndexed
:collection.forEachIndexed { index, element -> // ... }
źródło
break
środku?return@forEachIndexed
że zasadniczo posłuży jako przejściecontinue
do następnego elementu. Jeśli chcesz przerwać, musisz owinąć ją w funkcję i użyćreturn
w pętli, aby powrócić z tej otaczającej funkcji.Posługiwać się
indices
for (i in array.indices) { print(array[i]) }
Jeśli chcesz mieć wartość, a także indeks Użyj
withIndex()
for ((index, value) in array.withIndex()) { println("the element at $index is $value") }
Odniesienie: Control-flow in kotlin
źródło
Spróbuj tego; dla pętli
for ((i, item) in arrayList.withIndex()) { }
źródło
Alternatywnie możesz skorzystać z
withIndex
funkcji biblioteki:for ((index, value) in array.withIndex()) { println("the element at $index is $value") }
źródło
Wygląda na to, że tak naprawdę szukasz
filterIndexed
Na przykład:
listOf("a", "b", "c", "d") .filterIndexed { index, _ -> index % 2 != 0 } .forEach { println(it) }
Wynik:
źródło
.forEach(::println)
Zakresy prowadzą również do czytelnego kodu w takich sytuacjach:
(0 until collection.size step 2) .map(collection::get) .forEach(::println)
źródło
(0..collection.lastIndex step 2)
Przykład działania
forEachIndexed
w systemie AndroidIteruj z Index
itemList.forEachIndexed{index, item -> println("index = $index, item = $item ") }
Zaktualizuj listę za pomocą indeksu
źródło