我对每种方法的优点/缺点感到困惑(假设我需要同时使用index
和product
):
products.forEachIndexed{ index, product ->
...
}
for ((index, product) in products.withIndex()) {
...
}
products
这是一个简单的集合。
是否有任何表现/最佳做法/等参数更喜欢一个而不是另一个?
答案 0 :(得分:4)
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
创建了一层包装,但性能应该相同。