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)
})
答案 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(...)
是如何实施的,因此我们无法确定。