[Kotlin] iterator

Falcon·2021년 3월 4일
1

iterator 단골 손님 'next'

뭐 다들 다음과 같은 형태의 loop 한번 씩은 써보지 않았나

for (itr.hasNext()) {
print(itr.next)
}

요놈next 와 짝궁을 이루는게 이전 원소를 가리키는 previous 메소드인데

iterator 골 때린놈..

"뭐 어쩌라고?" 라고 생각할 수 있다. 공식 문서에도 다음과 같이 간단하게 나와있으니..


사실 까보면 next, previous는 동작 순서가 다르다.

val charArray = number.toMutableList()
val itr = charArray.listIterator()

itr.next // return current element and move forward position
itr.previous // return previous element and move backward position

next: 일단 현재 위치 반환하고 다음 놈으로 이동
previous : 이전 놈으로 이동하고 현재 위치 반환 (이전놈 위치 번환)

즉 next는 itr++ (후위 연산자)
previous 는 --itr (전위 연산자)
와 같이 작동한다.

그래서

fun main(args: Array<String>) {
    val str = "Hello World!".toMutableList()
    val itr = str.listIterator()

    while (itr.hasNext()) {
        println("next : ${itr.next()}")
        println("prev : ${itr.previous()}")
        println()
        itr.next()
    }
}

다음과 같이 동작한다.

next : H
prev : H
next : e
prev : e
(중략...)
next : !
prev : !
Process finished with exit code 0

profile
I'm still hungry

0개의 댓글