Cómo obtener el índice actual para cada Kotlin

2 minutos de lectura

avatar de usuario
Adolfo Dsilva

¿Cómo obtener el índice en un para cada ciclo? Quiero imprimir números para cada segunda iteración

Por ejemplo

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

En java, tenemos el bucle for tradicional

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

como conseguir el i?

  • también consulte stackoverflow.com/questions/46825787/…

    – s1m0nw1

    21 de febrero de 2018 a las 8:04

Además de las soluciones proporcionadas por @Audi, también hay forEachIndexed:

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

  • Funciona en matrices e iterables, ¿en qué más necesita que funcione?

    – zsmb13

    21 de febrero de 2018 a las 9:40

  • Lo siento, confundido con matrices java primitivas.

    – Adolf Dsilva

    21 de febrero de 2018 a las 9:59

  • Cualquier forma de usar break en el interior ?

    – Levon Petrosián

    28 de febrero de 2019 a las 0:15

  • No puede interrumpir todo el ciclo, lo único similar que puede hacer es [email protected] que esencialmente servirá como continue para saltar al siguiente elemento. Si necesita romper, tendría que envolverlo en una función y usar return en el ciclo para regresar de esa función envolvente.

    – zsmb13

    28 de febrero de 2019 a las 6:05

  • El uso de esto le impedirá trabajar con continue use la respuesta de @Audi si necesita dicha función

    – Mihae Kheel

    11/04/2021 a las 15:45


Usar indices

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

Si desea valor además de índice Use withIndex()

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

Referencia: Flujo de control en kotlin

  • Creo que esta respuesta es mejor porque no necesita aprender algo más, solo el ciclo for simple +1

    – underfilho

    15 de noviembre de 2018 a las 19:19

avatar de usuario
Anoop M Maddasseri

Como alternativa, puede utilizar el withIndex función de biblioteca:

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

Flujo de control: si, cuando, para, mientras:
https://kotlinlang.org/docs/reference/control-flow.html

prueba esto; en bucle

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

Ejemplo de trabajo de forEachIndexed en Android

Iterar con índice

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

Actualizar lista usando índice

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

avatar de usuario
Kirill Rakhman

Parece que lo que realmente estás buscando es filterIndexed

Por ejemplo:

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

Resultado:

b
d

avatar de usuario
s1m0nw1

Rangos también conducen a un código legible en tales situaciones:

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

  • alternativamente (0..collection.lastIndex step 2)

    – Kirill Rakhman

    26 de febrero de 2018 a las 21:14


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad