테이블

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

테이블 데이터 유형은 없는 모든 유형의 여러 값을 저장할 수 있으며, 이에는 부울, 숫자, 문자열, 함수 및 기타 테이블이 포함됩니다.굽은 괄호로 테이블 생성( {} ):


-- 변수 "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.14159
print(testArray[3]) -- true

배열에 쓰기

인덱스에서 배열의 값을 정의하거나 재정의하려면 괄호 안에 인덱스 번호( [index] )를 선언하고 = 및 값을 지정합니다.


local testArray = {"A string", 3.14159, true}
testArray[2] = 12345
testArray[4] = "New string"
print(testArray[2]) --12345
print(testArray[4]) -- New string

배열 반복 Iterate over arrays

배열을 반복하려면 for 루프를 사용할 수 있습니다.배열에 숫자 인덱스가 있기 때문에 배열의 길이())에 대해 숫자 루프를 사용할 수도 있습니다.


local testArray = {"A string", 3.14159, true, "New string"}
-- 일반 반복 사용 루프
for index, value in testArray do
print(index, value)
end
-- 배열 길이 연산자를 사용하여 반복(#)
for index = 1, #testArray do
print(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]) -- 새로운 아이템 #2
print(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 = 10
print(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 do
print(key, value)
end
--[[ 결과 출력:
fruitName Lemon
sour true
fruitColor Yellow
]]

키-값 쌍 제거

사전에서 키-값 쌍을 제거하거나 지우려면 해당 값을 키로 설정하십시오 nil.


local testDictionary = {
fruitName = "Lemon",
fruitColor = "Yellow",
sour = true
}
testDictionary.sour = nil
for key, value in testDictionary do
print(key, value)
end
--[[ 결과 출력:
fruitName Lemon
fruitColor Yellow
]]

참조 테이블

새 변수에 테이블을 저장하면 Luau는 해당 테이블의 복사본을 생성하지 않습니다.대신, 변수는 원래 테이블에 대한 참조 또는 포인터가 됩니다.테이블에 대한 참조는 원래 테이블의 모든 변경 사항을 반영합니다:


local originalArray = {10, 20}
local arrayReference = originalArray
print("Original:", originalArray[1], originalArray[2])
print("Reference:", arrayReference[1], arrayReference[2])
-- 원래 배열의 값 변경
originalArray[1] = 1000
originalArray[2] = 2000
print("Reference:", arrayReference[1], arrayReference[2])
--[[ 결과 출력:
Original: 10 20
Reference: 10 20
Reference: 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