본문 바로가기

Lua

Lua#9 Table과 iterator

Table

Lua에서 유연하게 지원되어 잘 사용되는 형태가 Table이 아닐까 합니다. 
Table은 여러 다른 데이터들의 그룹입니다. 그 안에는 숫자, 문자, 함수, 다른 테이블 모두 포함할 수 있습니다. 이전에 Array 배열도 단순한 하나의 Table 이라고 할 수 있어요. 

Array는 인덱스가 1부터 시작했지만 Table은 꼭 숫자 인덱스가 아니라 string 형태의 key 도 사용이 가능합니다. 아래 예제는 테이블을 선언하고 초기화 하는 다양한 방법이에요

t = { "aaa", 1, 2, name= 'nobakee', age= 12, school= 'Roblox School', 999 }


위 예제에서 key 가 없는 값은 순서대로 array 처럼 1,2,3 index를 갖게 됩니다. 
즉, t[1]은 "aaa", t[2]는 1, t[3]은 2, 그리고 t[4]는 999 입니다. 
중간에 key를 갖는 값이 있으면 그것 들은 무시하고, 마지막에 999가 t[4] 자리를 차지하는 것이지요.

그럼 'nobakee'는 

t.name 
t["name"]

 

으로 접근할 수 있습니다.

a1 = {x=0, y=0}
a2 = {}; a.x=0; a.y=0

선언할 때도 처음부터 a.x, a.y 이렇게 값을 넣을 수 있어요.
a1과 a2 는 똑같은 표현입니다. 

t1 = {"red","yellow","blue"}
t2 = {[1]="red",[2]="yellow", [3]="blue"}

이럴 필요는 없겠지만, 이 역시 똑같은 표현입니다. 

이렇게 테이블은
숫자 대신, 'key' 라는 형태로 이름을 가질 수 있고, 호출할 때는 '.' 을 찍어서 접근합니다. "[]" 도 가능하지만 타이핑을 많이 해야하니 꼭 그렇게 할 필요는 없지요. 이제까지 Roblox script를 만들면서 찍었던 모든 '.' 은 사실 테이블에 속한 key 였습니다. 

이런 그룹화된 table을 쉽게 다루기 위해서 iterator라는 반복을 도와주는 기능이 제공됩니다. 
숫자 index, key index 무관하게 전체를 모두 훌터주는 pairs 와 숫자 index 만 뽑아서 보여주는 ipairs 가 그것입니다. 
for 문과 함께 조합해서 사용하면 쉽게 table 내부를 반복할 수 있습니다. 

아래 예제를 참고하세요

t = { "aaa", 1, 2, name= 'nobakee', age= 12, school= 'Roblox School', 999 }
print('== pairs iteration')

for k, v in pairs(t) do
    print(k, v)
end

print('== ipairs iteration')
for i, v in ipairs(t) do
    print(i, v)
end

print ("--- 접근")
print (t.name)
print (t["name"])
print (t[1])

이제 table을 만들고 돌려볼 수 있겠죠?...;;;

'Lua' 카테고리의 다른 글

Lua#10 Module  (0) 2020.08.25
Lua#8 : Array  (0) 2020.08.20
Lua#7 : String  (0) 2020.08.20
Lua#6 : 함수  (0) 2020.08.12
Lua#5 : 조건  (0) 2020.08.11