Котлин - разница между циклами forEachIndexed и for in

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

products.forEachIndexed{ index, product ->
    ...
}

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

products вот 9X_enhanced-for-loop простая коллекция.

Есть ли какие-либо аргументы 9X_foreach в пользу производительности / передовой 9X_for-loop практики / и т. д., чтобы предпочесть одно 9X_foreach другому?

9
0
1
Общее количество ответов: 1

Ответ #1

Ответ на вопрос: Котлин - разница между циклами forEachIndexed и for in

Нет, они такие же. Вы можете прочитать исходный 9X_enhanced-for-loop код forEachIndexed и withIndex.

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


public fun  Iterable.withIndex(): Iterable> {
    return IndexingIterable { iterator() }
}

forEachIndexed использует локальную переменную 9X_enhanced-for-loop для подсчета индекса, в то время как withIndex создает 9X_kotlin декоратор для итератора, который также использует 9X_foreach переменную для подсчета индекса. Теоретически 9X_for withIndex создает еще один уровень упаковки, но производительность 9X_for-loop должна быть такой же.

10
0