[LUA] pairs, ipairs의 차이
루아의 반복문 루아에서 테이블 속 내용을 돌아가며 빼와서 작업할 때는 아래와 같은 식으로 쓰게 됩니다. -- 1. for i, v in pairs (t) do -- Do something... end -- 2. for i, v in ipairs (t) do -- Do something... end 간단한 작업을 할 때는 둘 중 어느 걸 사용하더라도 잘 작동할 것입니다. 하지만, 만약 특정 테이블에 대해 반복문을 실행할 때, 이터레이션을 ipairs 로 돌게 된다면 심각한 로직 에러가 발생할 수 있습니다. 지금부터 이 글에서 그 원인을 설명하고, 어떤 때에 pairs를 사용해야 하며 어떤 때에 ipairs를 사용하면 좋은지 알려드리도록 하겠습니다. 루아의 테이블 반복문 얘기하다가 갑자기 테이블 얘기를 꺼낸 이유가 있습니다. pairs와 ipairs가 굳이 나누어져있는 이유를 알고자 한다면, 반드시 테이블에 대한 이해가 우선시되어야 하기 때문이죠. 루아의 테이블(table)이란 데이터 타입은, 타 언어의 array와 map 데이터 타입의 특징을 둘 다 가지는 특이한 녀석입니다. 즉 아래의 모든 것이 테이블이라는 하나의 형식으로 사용된다는 의미입니다. local tblA = { 1 , 2 , 3 } local tblB = { "A" , "B" , "C" } local tblC = { nil , nil , nil } local tblD = { tblA, tblB, tblC, { 1 , 2 , 3 } } -- local tblA = { [1] = 1, [2] = 2, [3] = 3 } -- local tblB = { [1] = "A", [2] = "B", [3] = "C" } -- ... local tblE = { HP = 100 , MP = 100 , ATK = 1.5 } ...