Kotlin forEach order

时间:2017-12-16 05:49:32

标签: arrays loops foreach kotlin

Kotlin forEach是否按照数组的实际顺序迭代一个数组,或者有时可能是另一个顺序?我的意思是这总是打印1,2,3,... 9或者它可能会打印出像这样的1,5,3,4 ......

val numbers: Array<Int> = array(1,2,3,4,5,6,7,8,9)
    numbers.forEach({(number: Int) ->
        Log.d(tag,number)
    })

Kotlin forEach reference

3 个答案:

答案 0 :(得分:5)

forEach按顺序从第一个元素到最后一个元素进行迭代;源代码:

Collections.kt

/**
 * Performs the given [action] on each element.
 */
@kotlin.internal.HidesMembers
public inline fun <T> Iterable<T>.forEach(action: (T) -> Unit): Unit {
    for (element in this) action(element)
}

答案 1 :(得分:3)

是的,它保持真正的秩序。看看实施:

public inline fun IntArray.forEach(action: (Int) -> Unit): Unit {
        for (element in this) action(element)
    }

for循环使用数组的迭代器,它也保持顺序。

答案 2 :(得分:1)

这是两个不同的问题。是的,正如其他答案所指出的,它保持了秩序。但由于forEach没有打印任何内容,所有这些都取决于打印的实现。

例如,这并不总是按顺序打印数字1到10,即使它使用forEach

fun myPrint(i: Int) = launch { println(i) }

(1..10).forEach { n -> myPrint(n) }

由于我们不知道您的Log.d(...)是如何实施的,因此我们无法确定。