테이블 데이터 유형은 없는 모든 유형의 여러 값을 저장할 수 있으며, 이에는 부울, 숫자, 문자열, 함수 및 기타 테이블이 포함됩니다.굽은 괄호로 테이블 생성( {} ):
-- 변수 "t"에 할당된 빈 테이블 생성local t = {}print(t) -- {}
테이블을 배열 또는 사전으로 사용할 수 있습니다.배열은 인덱스로 순서가 지정된 숫자 목록을 사용하지만, 사전에는 숫자, 문자열 및 개체가 인덱스로 사용될 수 있습니다.
테이블 작업을 위한 내장 함수에 대한 자세한 정보는 table 라이브러리를 참조하십시오.
배열
배열 은 값의 순서가 지정된 목록입니다.배열은 특권이 있는 플레이어 그룹과 같은 데이터 컬렉션을 저장하는 데 유용합니다.
배열 생성
Luau 테이블을 사용하여 배열을 생성하려면 값을 순차적으로 구분하여 쉼표로 나누어 선언합니다.
-- 3개 항목의 배열 생성local testArray = {"A string", 3.14159, true}print(testArray)
배열에서 읽기
배열에서 읽으려면 참조 뒤에 괄호 쌍을 추가하고 내부 요소의 인덱스 번호를 지정합니다([pos]):
-- 3개 항목의 배열 생성local testArray = {"A string", 3.14159, true}print(testArray[1]) -- 문자열print(testArray[2]) -- 3.14159print(testArray[3]) -- true
배열에 쓰기
인덱스에서 배열의 값을 정의하거나 재정의하려면 괄호 안에 인덱스 번호( [index] )를 선언하고 = 및 값을 지정합니다.
local testArray = {"A string", 3.14159, true}testArray[2] = 12345testArray[4] = "New string"print(testArray[2]) --12345print(testArray[4]) -- New string
배열 반복 Iterate over arrays
배열을 반복하려면 for 루프를 사용할 수 있습니다.배열에 숫자 인덱스가 있기 때문에 배열의 길이())에 대해 숫자 루프를 사용할 수도 있습니다.
local testArray = {"A string", 3.14159, true, "New string"}-- 일반 반복 사용 루프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 = {"A string", 3.14159}table.insert(testArray, "New string")testArray[#testArray+1] = "Another new string"print(testArray[3]) -- 새 문자열print(testArray[4]) -- Another new string
배열의 시작과 끝 사이에 항목을 삽입하려면 table.insert()의 두 번째 인수로 위치 값을 포함하십시오.이것은 새 항목을 삽입하고 다음 항목을 하나의 인덱스 위치로 밀어 올립니다.
local testArray = {"First item", "Next item"}table.insert(testArray, 2, "NEW ITEM #2")print(testArray[1]) -- 첫 번째 항목print(testArray[2]) -- 새로운 아이템 #2print(testArray[3]) -- Next item
항목 제거
배열에서 항목을 제거하려면 table.remove()를 사용하십시오.이렇게 하면 지정된 위치에서 항목이 제거되고 후속 항목이 1개의 인덱스 위치로 이동됩니다.
local testArray = {"First item", "Next item", "Last item"}table.remove(testArray, 2)print(testArray[1]) -- 첫 번째 항목print(testArray[2]) -- Last item
사전
사전은 배열의 확장입니다. 사전은 키-값 쌍 집합을 저장하며, 키는 모든 숫자, 문자 또는 개체일 수 있습니다.
사전 만들기
사전 테이블을 만들려면 각 키 를 정의하고 =과 값 을 따르십시오. 각 키-값 쌍을 쉼표로 구분하십시오:
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}
사전의 키는 숫자, 문자열 및 개체일 수 있습니다.예를 들어, 키는 Instance 또한 될 수 있습니다.개체를 키로 사용하려면 괄호로 키를 선언하십시오([key]):
local part = Instance.new("Part")local testDictionary = {partType = "Block",[part] = true}
사전에서 읽기
사전에서 읽으려면 참조 뒤에 괄호 쌍을 추가하고 키 이름을 지정하십시오.(["key"]) 또는 (.key), 또는 변수 값을 사용하는 대신 문자열 키를 직접 참조하십시오([key]).
local part = Instance.new("Part")local testDictionary = {partType = "Block",[part] = true}-- 문자열 키에 대한 인용문 포함print(testDictionary["partType"]) -- 차단-- 또는 .를 사용하여 공백 없이 문자열 키를 인덱싱합니다print(testDictionary.partType) -- 차단-- 문자열이 아닌 키에 대한 따옴표 생략print(testDictionary[part]) -- true
사전에 쓰기
새 또는 기존 사전 키의 값을 정의하거나 재작성하려면 키 이름을 괄호( )로 선언하거나, 키가 문자열인 경우에는 ( )를 사용한 후 값:
local testDictionary = {fruitName = "Lemon",sour = true}-- 기존 키의 값 변경testDictionary["fruitName"] = "Cherry"testDictionary.sour = false-- 새 키-값 쌍 삽입testDictionary.fruitCount = 10print(testDictionary.fruitName) -- 체리print(testDictionary.sour) -- 거짓print(testDictionary.fruitCount) -- 10
사전에 반복 Iterate over dictionaries
사전을 반복하려면 for 루프를 사용하십시오:
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}for key, value in testDictionary doprint(key, value)end--[[ 결과 출력:fruitName Lemonsour truefruitColor Yellow]]
키-값 쌍 제거
사전에서 키-값 쌍을 제거하거나 지우려면 해당 값을 키로 설정하십시오 nil.
local testDictionary = {fruitName = "Lemon",fruitColor = "Yellow",sour = true}testDictionary.sour = nilfor key, value in testDictionary doprint(key, value)end--[[ 결과 출력:fruitName LemonfruitColor Yellow]]
참조 테이블
새 변수에 테이블을 저장하면 Luau는 해당 테이블의 복사본을 생성하지 않습니다.대신, 변수는 원래 테이블에 대한 참조 또는 포인터가 됩니다.테이블에 대한 참조는 원래 테이블의 모든 변경 사항을 반영합니다:
local originalArray = {10, 20}local arrayReference = originalArrayprint("Original:", originalArray[1], originalArray[2])print("Reference:", arrayReference[1], arrayReference[2])-- 원래 배열의 값 변경originalArray[1] = 1000originalArray[2] = 2000print("Reference:", arrayReference[1], arrayReference[2])--[[ 결과 출력:Original: 10 20Reference: 10 20Reference: 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 --> attempt to modify a readonly table
깊은 동결
내부에 중첩된 테이블이 있는 더 복잡한 테이블을 동결하려면 다음과 유사한 재귀 함수를 사용하십시오.
local function deepFreeze(target)
-- 테이블 얕은 동결
table.freeze(target)
-- 테이블의 각 키를 확인하고 테이블인 경우 동결합니다
for _, value in target do
-- 값이 얼지지 않았는지 확인하십시오; 이미 얼어붙었다면 오류가 발생합니다
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(v)
end
end
end
기능이 있으면 다음과 같이 테이블을 깊이 동결할 수 있습니다:
local target = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}deepFreeze(target)target.playerInfo.playerID = 1 --> attempt to modify a readonly table