반응형

Iterator 에 대하여 알아봅시다.

 

C 의 STL 을 아시는 분은 iterator 가 무엇인지를 이해하실 것 입니다.

모르시는 분들을 위하여 잠시 여기에 소개하고자 합니다.

 

Iterator 란?

배열,리스트,큐,스텍 등등 어떠한 데이터 요소들을 다수 넣어 놓고 프로그램에서 이를 접근 운영하는 경우가 많습니다.

이러한 것을 container (컨테이너) 라고 합니다. 즉 데이터들을 담아 놓는 공간이라 생각하시면 됩니다.

 

이러한 컨테이너에 다수의 데이터들을 넣어 보관하다가 , 이 데이터들을 하나하나 순차적으로 접근할 필요가 있을때가 있습니다.

즉 데이터들을 하나하나 찾아다니며 돌아다니는 녀석이 바로 iterator (연속방문자? 정도로 해석) 라 합니다.

iterator 의 형태는 컨테이너의 자료구조에 의하여 정해집니다. 자료구조는 리스트의 구조와 트리의 구조가 있겠죠.

 

어찌됬든 이러한 방문자를 이용하여 루아의 for 문을 완성할 수 있습니다.

for 문은 일반적으로 어디서부터 어디까지 어떻게 증가하여 정해진 프로그램 블럭을 수행한다.. 라는 의미로 사용되죠.

 

여기서 iterator 를 이용하면 어디서부터 어디까지라기 보다는 해당 컨테이너(루아의 테이블)에 보관되어 있는 데이터들을 하나하나 방문하면서 for 루프를 돌리는 형태로 수행될 수 있습니다.

 

iterator를 이용하는 for loop 의 문법은 다음과 같습니다.

 

for var {, var} in explist do block end

 

여기서 explist 는 루프에 들어가기 전에 평가하는 함수 입니다. 이를 iterator function 이라 합니다.

 

다음의 함수들이 루아 테이블에서 iterator function 으로 사용되어 집니다.

 

pairs(table)

 

pairs() iterator 함수는 주어진 테이블의 key-value 쌍을 모두 처리 합니다.

인덱스에 의한 순차적인 테이블 뿐만 아니라 그렇지 않은 모든 key-value 쌍을 처리 하는 것 입니다.

 

for key,value in pairs(t) do print(key,value) end
3       10
1       3
4       17
2       7
pi      3.14159
banana  yellow

 

 

위와 같이 table t 에 있는 모든 key-value 쌍을 처리하며 , key 에 의한 순차적인 순서(order) 를 지키지 않습니다.

 루아스크립트,프로그래밍,웹,웹프로그래밍

 

ipairs(table)

 

이 함수는 pairs 함수와는 다르게 순차적인 key order 를 처리 합니다. 즉 순차적이지 않은 key 에 대해서는 처리하지 않습니다.

 

for index,value in ipairs(t) do print(index,value) end
1       3
2       7
3       10
4       17

 

위에서와 같이 table t 에 있는 key-value 쌍중에 순차적인 인덱스로 이루어진 데이터들에 대해서만 순차적으로 처리하게 됩니다.

 

순차적이면서 순차적이지 않은 모든 key-value에 대하여 처리하고자 한다면 다음과 같이 사용하면 됩니다.

 

for key,value in next,t,nil do print(key,value) end


1       3
2       7
3       10
4       17
pi      3.14159
banana  yellow

이러한 형태는 next 함수를 사용하는 것 입니다. 위의 문장은 next 함수로 t 를 처리하며 nil 이 될때까지 진행 합니다.


+ Recent posts