Котлин - разница между циклами forEachIndexed и for in
Я не понимаю, каковы преимущества / недостатки 9X_foreach-loop каждого из этих подходов (при условии, что 9X_for-loop мне нужно использовать как index
, так и product
):
products.forEachIndexed{ index, product ->
...
}
for ((index, product) in products.withIndex()) {
...
}
products
вот 9X_enhanced-for-loop простая коллекция.
Есть ли какие-либо аргументы 9X_foreach в пользу производительности / передовой 9X_for-loop практики / и т. д., чтобы предпочесть одно 9X_foreach другому?
Ответ #1
Ответ на вопрос: Котлин - разница между циклами forEachIndexed и for in
Нет, они такие же. Вы можете прочитать исходный 9X_enhanced-for-loop код forEachIndexed и withIndex.
public inline fun Iterable.forEachIndexed(action: (index: Int, T) -> Unit): Unit {
var index = 0
for (item in this) action(index++, item)
}
public fun Iterable.withIndex(): Iterable> {
return IndexingIterable { iterator() }
}
forEachIndexed
использует локальную переменную 9X_enhanced-for-loop для подсчета индекса, в то время как withIndex
создает 9X_kotlin декоратор для итератора, который также использует 9X_foreach переменную для подсчета индекса. Теоретически 9X_for withIndex
создает еще один уровень упаковки, но производительность 9X_for-loop должна быть такой же.
-
16
-
10
-
12
-
9
-
4
-
4
-
7
-
4
-
7
-
3
-
10
-
4
-
5
-
7
-
5
-
3
-
11
-
5
-
14
-
5
-
6
-
3
-
3
-
1
-
4
-
2
-
2
-
2
-
1
-
4
-
2
-
3
-
3
-
14
-
5
-
3
-
5
-
4
-
2
-
5
-
2
-
3
-
1
-
2
-
1
-
6
-
4
-
1
-
1
-
3