Search

Ranges and progressions

Ranges

Kotlin 에서는 kotlin.ranges 패키지의 .rangeTo().rangeUntil() 함수를 사용하여 값을 쉽게 범위로 만들 수 있다.

생성 방법

// 닫힌 범위 예제 println(4 in 1..4) // true // 열린 범위 예제 println(4 in 1..<4) // false
Kotlin
복사
닫힌 범위를 만드려면 .. 연산자를 사용하여 .rangeTo() 함수를 호출하라.
열린 범위를 만드려면 ..< 연산자를 사용하여 .rangeUntil() 함수를 호출하라.
for (i in 1..4) print(i) // 1234
Kotlin
복사
범위는 for 루프에서 반복할 때 유용하다.

범위 관련 함수

for (i in 4 downTo 1) print(i) // 4321
Kotlin
복사
역순으로 숫자를 반복하려면 downTo 함수를 사용하라.
for (i in 0..8 step 2) print(i) println() // 02468 for (i in 0..<8 step 2) print(i) println() // 0246 for (i in 8 downTo 0 step 2) print(i) // 86420
Kotlin
복사
숫자를 임의의 간격으로 반복하려면 step 함수를 사용하라.

Progressions

정수형(Int, Long, Char) 범위는 산술 수열처럼 취급될 수 있다.
Kotlin에서는 이러한 수열이 IntProgression, LongProgression, CharProgression 같은 특별한 타입으로 정의된다.
for (int i = first; i <= last; i += step) { // ... }
Kotlin
복사
Progression에는 세 가지 중요한 속성이 있다.
1.
첫 번째 요소, 마지막 요소, 그리고 0이 아닌 step이 있다.
2.
첫 번째 요소는 first이고 그 다음 요소는 이전 요소에 step을 더한 값이다.
3.
양의 step을 가진 수열의 반복은 인덱스 기반 for 루프와 동일하다.
for (i in 1..10) print(i) // 12345678910
Kotlin
복사
범위를 반복하여 암시적으로 수열을 만들 때 이 수열의 첫 번째 및 마지막 요소는 범위의 끝점이며 step은 1이다.
for (i in 1..8 step 2) print(i) // 1357
Kotlin
복사
커스텀 step 을 정의하려면 범위에서 step 함수를 사용하라.
for (i in 1..9 step 3) print(i) // 마지막 요소는 7 // 147
Kotlin
복사
마지막 요소는 다음과 같이 계산된다.
양의 step : (last - first) % step == 0 인 값을 넘지 않는 최대 값
음의 step : (last - first) % step == 0 인 값을 넘지 않는 최소 값
따라서, 마지막 요소는 항상 지정된 끝 값과 같지 않을 수 있다.
println((1..10).filter { it % 2 == 0 }) // [2, 4, 6, 8, 10]
Kotlin
복사
Progression은 각각 Int, Long 또는 Char 타입을 사용하는 Iterable<N> 을 구현하므로 map, filter 와 같은 다양한 컬렉션 함수를 사용할 수 있다.