2017-09-19 11 views
1

「のための」「forEachIndexed」の間と違い、私はこれらのアプローチのそれぞれの長所/短所(私はindexproductの両方を使用する必要があると仮定)があるものに混乱しています:Kotlin - ループ

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

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

productsはここでは簡単なコレクションです。

どちらか一方を優先するパフォーマンス/ベストプラクティス/ etc引数はありますか?

答えて

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() } 
} 

forEachIndexedwithIndexもインデックスをカウントするためにVARを使用して、イテレータのためのデコレータを作成しながら、インデックスをカウントするために地元のVARを使用しています。理論的には、withIndexはもう1つのラッピング層を作成しますが、パフォーマンスは同じにする必要があります。