Kotlin - “forEachIndexed”和“for in”循环之间的区别

时间:2017-09-19 23:51:05

标签: for-loop foreach kotlin

我对每种方法的优点/缺点感到困惑(假设我需要同时使用indexproduct):

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

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

products这是一个简单的集合。

是否有任何表现/最佳做法/等参数更喜欢一个而不是另一个?

1 个答案:

答案 0 :(得分:4)

不,他们是一样的。您可以阅读forEachIndexedwithIndex的来源。

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创建了一层包装,但性能应该相同。