루아의 테이블은 내부에 다중 값들을 저장가능하며, C언어 배열과 비슷한듯하다.
차이점이 있다면 테이블은 단순히 숫자, 문자열뿐많이 아니라 다른값도 들어갈수있다는것이다.
(원문 : It's not just numbers or strings that can be used as keys)
하지만 공식 Gmod Lua 유저 위키에 따르면 게리모드 루아의 테이블은 nil 타입의 변수는 안된다고 한다.
(원문 : keys can be any type of variable, except for nil)
구성은 Key와 Value로 이루어져있다.
Key란?
루아의 테이블은 키와 값을 포함하고 있으며, 키는 값의 식별자이다.
다른 말로 표현하자면 모든 항목의 "인덱스(값)"이라고 할수 있다.
정리하자면 표의 항목은 "키/값"이 쌍이라고도 할 수 있다.
여러 가지 방법으로 키를 사용할 수 있는데 예제를 통해 알아보겠다.
첫째, 키는 숫자이거나 항목 순서
//정수형 테이블
[1]
[2]
[3]
[4]
[5]
-- 기타 등등
//문자열형 테이블
["문자열1"]
["문자열2"]
["문자열3"]
-- 기타 등등
Value란?
키에 대한 값이다. 형태는 아무거나 된다. 다른 테이블까지 가능하다고 한다.
(원문 : Values can be any data type - even other tables!)
위에서 테이블에 대한 전반적인 설명을 했다. 이제 예제를 통해 알아보고자한다.
테이블 생성 예제
//비어있는 테이블 구조체는 선언은 아래와 같이 한다. ( {} )
emptyTable = {}
//값을 미리 정의할 테이블은 아래와 같이 한다
table1 =
{
[1] = "First",
[2] = "Second",
//주의! 모든 키벨류 라인에는 반드시 콤마(,)를 붙여야한다. 소스파운과는 대비되는 차이점이다.
}
//////////////////////////////////////////////////////////////////////////////////////////
//숫자 "순서"값을 자동으로 채우도록 할 수도 있다
table1 = { "First", "Second" }
// table1은 아래와 같이 값을 가지게 될것이다.
//[1] = First, and [2] = Second.
//문자열 키를 두가지 방법으로 테이블에 정의 할수있다.
//1. 짧게 처리:
table1.SomeStringKey = "Hello!"
//2. 길게처리:
table1["SomeStringKey"] = "Hello!"
//위 두가지 방법을 말로 설명하자면
//table1은 SomeStringKey과 동일하다. 출력시키면 Hello!가 나올것
3D 테이블 생성 예제
local store = {}
store[1] = {name = "shoe", price = 400}
store[2] = {name = "Mop", price = 500}
store[2] = {name = "Orange", price = 600}
store[3] = {name = "Keyboard", price = 700}
for k,v in pairs(store) --//둘중하나 선택
do
//print(k, v.name, v.price)
print(k, v["name"], v["price"])
end
=============================================================================
다른 방식으로 이렇게 해도된다.
local store = {}
local store =
{
{name = "shoe", price = 400},
{name = "Mop", price = 500},
{name = "Orange", price = 600},
{name = "Keyboard", price = 700},
}
for k,v in pairs(store) --//둘중하나 선택
do
//print(k, v.name, v.price)
print(k, v["name"], v["price"])
end
테이블 반복(Looping over a table)
테이블내부의 키/벨류값을 모두 넘겨 받는 방법으로 for을 쓸수있다.
키벨류가 어떻게 정의되어 있느냐에 따라 사용 방법이 달라진다.
① 숫자 "순서" 키로 정의되지 않은 키가 있는 경우
즉 문자열 키 또는 숫자 키를 "순서"로 정의한 경우 pairs()을 사용하여 테이블을 반복해야 한다.
table1 = { "First", "Second", "Third" }
table1.StringKey = "Fourth?"
for i=1, #table1 do //#table1은 테이블의 최대개수
print( i .. " == " .. table1[i] )
end
보다 시피 StringKey를 추가했지만 for문에 반영되지않는다.
아래와 같이 for문에 pairs()를 써야한다.
table1 = { "First", "Second", "Third" }
table1.StringKey = "Fourth?"
for key, value in pairs( table1 ) do
print( key .. " == " .. value )
end
테이블 라이브러리 사용법(Usage of the table library)
테이블 라이브러리는 표준 루아 라이브러리로써 테이블을 조작하는 함수를 제공한다.
게리모드에선 라이브러리에 몇개더 유용한 함수(funciton)이 추가되었다.
아래 예제를 통해 테이블 라이브러리 함수를 정의해보겠다.
① 테이블 합치기(table.Merge)
Replace개념에 가까운 함수다.
Fruits =
{
"Apple",
"Orange",
"Banana",
"Pineapple",
}
Veggies =
{
"Pepper",
"Tomato"
}
//'Veggies'를 'Fruits' table에 합치기위해 table.Merge함수를 사용한 예제임.
table.Merge( Fruits, Veggies ) //인자값(args): to, from
print( table.concat(Fruits," ") )
② 테이블 추가(table.Add)
단순히 추가되는 기능.
Fruits =
{
"Apple",
"Orange"
}
Veggies =
{
"Pepper",
"Tomato"
}
table.Add(Fruits, Veggies) -- args: to, from
print( table.concat(Fruits," ") )
③ 그외 테이블 함수(Other table functions)
게리모드 위키 라이브러리에 검색하면 나온다. [클릭시 이동]
다른 함수(Other functions)
다음과 같은 다른 기능들도 테이블에 유용하지만 이에 국한되지는 않는다.
추가적으로 참고하면 좋은 사이트
coding-factory.tistory.com/556
[메인으로 돌아가기]
'LUA > Garry's Mod' 카테고리의 다른 글
[Gmod Lua:문법] 1-7. 함수선언 (2) | 2021.04.17 |
---|---|
[Gmod Lua:문법] 1-6. 참거짓 (0) | 2021.04.17 |
[Gmod Lua:문법] 1-4. 변수선언 (0) | 2021.04.13 |
[Gmod Lua:문법] 1-3. 연산자 (0) | 2021.04.12 |
[Gmod Lua:문법] 1-2. 반복문 (0) | 2021.04.12 |