Kotlin – Разница между циклами «forEachIndexed» и «for in»

Я смущен тем, каковы преимущества / недостатки каждого из этих подходов (при условии, что мне нужно использовать как index и product ):

 products.forEachIndexed{ index, product -> ... } for ((index, product) in products.withIndex()) { ... } 

products здесь – простая коллекция.

Есть ли какой-либо аргумент производительности / лучшей практики / etc для предпочтения друг другу?

    Нет, они одинаковы. Вы можете прочитать источник forEachIndexed и withIndex .

     public inline fun <T> Iterable<T>.forEachIndexed(action: (index: Int, T) -> Unit): Unit { var index = 0 for (item in this) action(index++, item) } public fun <T> Iterable<T>.withIndex(): Iterable<IndexedValue<T>> { return IndexingIterable { iterator() } } 

    forEachIndexed использует локальный var для подсчета индекса, а withIndex создает декоратор для итератора, который также использует индекс var для подсчета. Теоретически, withIndex создает еще один слой обертывания, но производительность должна быть одинаковой.