Я смущен тем, каковы преимущества / недостатки каждого из этих подходов (при условии, что мне нужно использовать как 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
создает еще один слой обертывания, но производительность должна быть одинаковой.