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 이 될때까지 진행 합니다.
'Programming > LUA' 카테고리의 다른 글
[루아스크립트/프로그래밍]루아(LUA)사용자 정의 iterator 함수 (0) | 2018.05.17 |
---|---|
[루아스크립트/프로그래밍]루아(LUA)함수의 인수는 global 인가 local 인가? (0) | 2018.05.17 |
[루아스크립트/프로그래밍]루아(LUA)for 문에 대한 tutorial (1) (0) | 2018.05.13 |
[루아스크립트/프로그래밍]루아(LUA)함수를 테이블 키로 사용한다 (0) | 2018.05.13 |
[루아스크립트/프로그래밍]루아(LUA)주소로서의 문자열 (0) | 2018.05.13 |