2017-09-19 53 views
1

我上有什麼優點/每種方法的優缺點困惑(假設我需要同時使用indexproduct):科特林 - 「forEachIndexed」之間的差異「爲」循環

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

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

products這裏是一個簡單的集合。

是否有任何性能/最佳實踐/等論點來比較優先選擇一個?

回答

1

不,它們是一樣的。您可以閱讀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使用一個局部變量來計算,而對於withIndex迭代器也使用VAR來計算索引創建一個裝飾的指標。理論上,withIndex創建一個更多的包裝層,但性能應該是相同的。