2017-12-16 3 views
0

Kotlin forEach는 배열의 실제 순서대로 배열을 반복하거나 때때로 다른 순서로 배열 될 수 있습니까? ... 나는이 항상 1,2,3, ... 9를 인쇄 않습니다 의미 또는이 1,5,3,4 뭔가를 인쇄 할 수 있습니다 위해Kotlin forEach 주문

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

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

그래, 진짜 순서 유지합니다. 구현을 살펴보십시오 :

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

For 루프는 순서도 유지하는 배열의 반복자를 사용합니다.

0

다음은 두 가지 질문입니다. 예, 다른 답변에서 지적한대로 주문을 유지합니다. 그러나 forEach은 아무 것도 인쇄하지 않기 때문에 인쇄의 구현에 따라 다릅니다. 우리는 당신의 Log.d(...)가 구현되는 방법을 알고하지 않기 때문에

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

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

, 우리는 할 수 없습니다

예를 들어,이 항상 forEach 사용에도 불구하고, 위해 (10)에 숫자 1을 인쇄되지 않습니다 확실한.