테이블 데이터 유형은 불린, 숫자, 문자열, 함수 및 기타 테이블을 포함하여 nil이 아닌 모든 유형의 여러 값을 저장할 수 있습니다. 중괄호({})를 사용하여 테이블을 생성합니다:
-- 변수 "t"에 할당된 빈 테이블 생성local t = {}print(t) -- {}
테이블을 배열 또는 사전으로 사용할 수 있습니다. 배열은 숫자의 정렬된 목록을 인덱스로 사용하지만, 사전은 숫자, 문자열 및 객체를 인덱스로 가질 수 있습니다.
테이블 작업을 위한 내장 함수에 대한 자세한 내용은 table 라이브러리를 참조하세요.
배열
배열은 값의 정렬된 목록입니다. 배열은 특별한 권한을 가진 플레이어 그룹과 같이 데이터의 컬렉션을 저장하는 데 유용합니다.
배열 생성하기
Luau 테이블을 사용하여 배열을 만들려면 값들을 순차적으로 선언하고 쉼표로 구분합니다.
-- 세 개의 항목으로 배열 생성local testArray = {"문자열", 3.14159, true}print(testArray)
배열에서 읽기
배열에서 읽으려면 참조 뒤에 대괄호 쌍을 추가하고 요소의 인덱스 번호를 지정합니다 ([pos]):
-- 세 개의 항목으로 배열 생성local testArray = {"문자열", 3.14159, true}print(testArray[1]) -- 문자열print(testArray[2]) -- 3.14159print(testArray[3]) -- true
배열에 쓰기
인덱스에서 배열의 값을 정의하거나 재작성하려면 대괄호([와 ]) 뒤에 인덱스 번호를 선언하고 =와 값을 추가합니다:
local testArray = {"문자열", 3.14159, true}testArray[2] = 12345testArray[4] = "새 문자열"print(testArray[2]) -- 12345print(testArray[4]) -- 새 문자열
배열 반복하기
배열을 반복하려면 for 루프를 사용할 수 있습니다. 배열이 숫자 인덱스를 가지므로, 배열의 길이(#array)까지 숫자 for 루프를 사용할 수도 있습니다.
local testArray = {"문자열", 3.14159, true, "새 문자열"}-- 일반 반복 사용for index, value in testArray doprint(index, value)end-- 배열 길이 연산자 (#)를 사용하여 반복for index = 1, #testArray doprint(index, testArray[index])end
항목 삽입하기
배열 끝에 항목을 삽입하는 두 가지 내장 방법이 있습니다:
- 배열에 대한 참조와 항목 값을 Luau의 table.insert() 함수에 전달합니다.
- 새 항목을 array[#array+1] 구문을 사용하여 배열에 추가합니다.
local testArray = {"문자열", 3.14159}table.insert(testArray, "새 문자열")testArray[#testArray+1] = "또 다른 새 문자열"print(testArray[3]) -- 새 문자열print(testArray[4]) -- 또 다른 새 문자열
배열의 시작과 끝 사이에 항목을 삽입하려면 table.insert()의 두 번째 인수로 위치 값을 포함합니다. 이것은 새 항목을 삽입하고 이후의 항목들을 하나의 인덱스 위치로 밀어냅니다.
local testArray = {"첫 번째 항목", "다음 항목"}table.insert(testArray, 2, "새 항목 #2")print(testArray[1]) -- 첫 번째 항목print(testArray[2]) -- 새 항목 #2print(testArray[3]) -- 다음 항목
항목 제거하기
배열에서 항목을 제거하려면 table.remove()를 사용합니다. 이는 지정된 위치의 항목을 제거하고 이후의 항목들을 하나의 인덱스 위치로 이동시킵니다.
local testArray = {"첫 번째 항목", "다음 항목", "마지막 항목"}table.remove(testArray, 2)print(testArray[1]) -- 첫 번째 항목print(testArray[2]) -- 마지막 항목
사전
사전은 배열의 확장입니다. 사전은 키-값 쌍 집합을 저장하며, 키는 숫자, 문자열 또는 객체일 수 있습니다.
사전 생성하기
사전 테이블을 생성하려면 각 키를 정의한 후 =와 값을 이어서 작성합니다. 각 키-값 쌍은 쉼표로 구분합니다:
local testDictionary = {과일이름 = "레몬",과일색상 = "노랑",신맛 = true}
사전의 키는 숫자, 문자열 및 객체일 수 있습니다. 예를 들어, 키는 Instance이기도 합니다. 객체를 키로 사용하려면 대괄호([]) 안에 키를 선언합니다:
local part = Instance.new("Part")local testDictionary = {partType = "블록",[part] = true}
사전에서 읽기
사전에서 읽으려면 참조 뒤에 대괄호 쌍을 추가하고 키 이름을 지정합니다. 문자열 키를 직접 참조하려면 (["key"]) 또는 (.key)를 사용하거나, 변수 값을 사용할 수 있습니다 ([key]).
local part = Instance.new("Part")local testDictionary = {partType = "블록",[part] = true}-- 문자열 키에 대해 따옴표 포함print(testDictionary["partType"]) -- 블록-- 빈 공간 없는 문자열 키에 점(.)을 사용하여 인덱싱print(testDictionary.partType) -- 블록-- 비문자열 키에 대해 따옴표 생략print(testDictionary[part]) -- true
사전에 쓰기
새로운 또는 기존 사전 키의 값을 정의하거나 재작성하려면 대괄호([])에 키 이름을 선언하거나, 키가 문자열인 경우, (.key) 뒤에 =와 값을 추가합니다:
local testDictionary = {과일이름 = "레몬",신맛 = true}-- 기존 키의 값 변경testDictionary["과일이름"] = "체리"testDictionary.신맛 = false-- 새로운 키-값 쌍 추가testDictionary.과일개수 = 10print(testDictionary.과일이름) -- 체리print(testDictionary.신맛) -- falseprint(testDictionary.과일개수) -- 10
사전 반복하기
사전을 반복하려면 for 루프를 사용합니다:
local testDictionary = {과일이름 = "레몬",과일색상 = "노랑",신맛 = true}for key, value in testDictionary doprint(key, value)end--[[ 결과 출력:과일이름 레몬신맛 true과일색상 노랑]]
키-값 쌍 제거하기
사전에서 키-값 쌍을 제거하려면 해당 키의 값을 nil로 설정합니다.
local testDictionary = {과일이름 = "레몬",과일색상 = "노랑",신맛 = true}testDictionary.신맛 = nilfor key, value in testDictionary doprint(key, value)end--[[ 결과 출력:과일이름 레몬과일색상 노랑]]
테이블을 참조로 사용하기
변수에 테이블을 저장하면, Luau는 해당 테이블의 복사본을 생성하지 않습니다. 대신, 변수는 원래 테이블에 대한 참조, 또는 포인터가 됩니다. 테이블에 대한 모든 참조는 원래 테이블에 대한 모든 변경 사항을 반영합니다:
local originalArray = {10, 20}local arrayReference = originalArrayprint("원본:", originalArray[1], originalArray[2])print("참조:", arrayReference[1], arrayReference[2])-- 원본 배열에서 값 변경originalArray[1] = 1000originalArray[2] = 2000print("참조:", arrayReference[1], arrayReference[2])--[[ 결과 출력:원본: 10 20참조: 10 20참조: 1000 2000]]
테이블 복제하기
얕은 복제
중첩된 테이블 없이 테이블을 복사하려면, Luau는 table.clone() 메서드를 제공합니다.
local original = {key = "value",engine = "Roblox",playerID = 505306092}local clone = table.clone(original)
깊은 복제
더 복잡한 테이블을 복사하려면, 다음과 유사한 재귀 함수를 사용해야 합니다:
-- 테이블의 깊은 복제를 위한 함수
local function deepClone(original)
-- 복제를 위한 새로운 테이블 정의
local clone = table.clone(original)
-- 원본 테이블을 반복하여 테이블 값을 확인
-- 값으로서 테이블이 발견되면, 키(인덱스)로 깊게 복제합니다
for key, value in original do
if type(value) == "table" then
clone[key] = deepClone(value)
end
end
-- 깊은 복제된 테이블의 최종 복제를 반환
return clone
end
함수가 준비되면, 다음과 같이 깊은 복사를 수행할 수 있습니다:
local original = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}local clone = deepClone(original)
테이블 동결하기
테이블을 동결하면 읽기 전용이 되어, 변경하고 싶지 않은 상수 값을 만드는 데 유용합니다. 동결은 영구적입니다; "해동"이나 "해제" 메서드가 없습니다. 테이블이 동결되어 있는지 확인하려면 table.isfrozen()을 사용합니다.
얕은 동결
중첩된 테이블 없이 테이블을 동결하려면, Luau는 table.freeze() 메서드를 제공합니다.
local target = {key = "value",engine = "Roblox",playerID = 505306092}table.freeze(target)target.playerID = 1 --> 읽기 전용 테이블 수정 시도
깊은 동결
중첩된 테이블이 있는 더 복잡한 테이블을 동결하려면, 다음과 유사한 재귀 함수를 사용합니다:
local function deepFreeze(target)
-- 테이블을 얕게 동결합니다
table.freeze(target)
-- 테이블의 각 키를 확인하고 테이블이면 동결합니다
for _, value in target do
-- 값이 동결되지 않았는지 확인합니다; 이미 동결되어 있다면 오류가 발생합니다
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(value)
end
end
end
함수가 준비되면, 다음과 같이 테이블을 깊게 동결할 수 있습니다:
local target = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}deepFreeze(target)target.playerInfo.playerID = 1 --> 읽기 전용 테이블 수정 시도