테이블

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

nil이 아닌 모든 유형의 값을 저장하는 테이블 데이터 형식은 nil, 숫자, 1>문자열1>, 4>함수4>, 및 기타 테이블을 포함합니다. 쿼리 테이블을 만들기 위해 7>Curly Braces7>를 사용


-- 변수 "t"에 할당된 빈 테이블 생성
local t = {}
print(t) -- {}

테이블을 배열 또는 사전 으로 사용할 수 있습니다. 배열은 인덱스 순으로 숫자의 목록을 사용하지만 사전은 문자열, 문자열 및 개체를 인덱스로 사용할 수 있습니다.

For more information on built-in functions for working with tables, see the table library.

배열

배열은 특수 권한을 가진 플레이어 그룹과 같은 데이터 컬렉션을 저장하는 데 유용합니다.

배열 생성

Luau 테이블을 사용하여 배열을 생성하려면 값을 쉼표로 구분된 순차적 순서로 선언합니다.


-- 3개의 항목이 있는 배열 생성
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray)

배열에서 읽기

배열에서 읽으려면 참조 후에 스퀘어 따옴표 쌍을 추가하고 요소 내의 인덱스 번호를 지정합니다([pos]):


-- 3개의 항목이 있는 배열 생성
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray[1]) -- 문자열
print(testArray[2]) -- 3.14159
print(testArray[3]) -- Camera

배열에 작성

인덱스에 있는 배열의 값을 정의하거나 다시 작성하려면 [index] 다음에 = 및 값을 입력합니다.


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

배열 반복

배열을 반복하려면 for 루프를 사용할 수 있습니다. 배열에 숫자 인덱스가 있기 때문에 for 루프를 사용하여 배열 길이( # array )까지 수를 세는 수학적 2>for2> 루프를 사용할 수 있습니다( 5>for5> 에서 시작).


local testArray = {"A string", 3.14159, workspace.Camera, "New string"}
-- 일반 반복 사용
for index, value in testArray do
print(index, value)
end
-- 배열 길이 연산자를 사용하여 반복(#)
for index = 1, #testArray do
print(index, testArray[index])
end
--[[ 결과 출력:
1 A string
2 3.14159
3 Camera
4 New string
1 A string
2 3.14159
3 Camera
4 New string
]]

아이템 삽입

배열의 에 아이템을 삽입하는 두 가지 내장 방법이 있습니다.

  • 배열 및 항목 값에 대한 참조를 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() 를 사용합니다. 이렇게 하면 지정된 위치의 항목이 삭제되고 다음 항목이 하나의 인덱스 위치로 다시 이동됩니다.


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] )을 사용하십시오.


local part = Instance.new("Part")
local testDictionary = {
PartType = "Block",
[part] = true
}
-- 문자열 열에 대한 따옴표 포함
print(testDictionary["PartType"]) -- 블록
-- 정규화되지 않은 열에 대한 따옴표 생략
print(testDictionary[part]) -- true

사전에 글쓰기

새로운 또는 기존 사전 키의 값을 정의하거나 다시 작성하려면 따옴표([key] )를 사용하여 키 이름을 선언하고 값을 다음에 이어 작성합니다: = 및 값:


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

사전 항목 반복

사전을 반복하려면 pairs() 루프에서 글로벌 함수 for 를 사용하십시오.


local testDictionary = {
FruitName = "Lemon",
FruitColor = "Yellow",
Sour = true
}
for key, value in pairs(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 pairs(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 deepCopy(original)
-- 복사본에 대한 새 테이블 정의
local copy = {}
-- 원래 테이블을 클론하려면 루프
for key, value in original do
-- 값의 형식이 테이블인 경우 키(인덱스)에 깊이 복사
-- 기타 (또는) 형식이 테이블이 아닙니다. 대신 인덱스에 기본 값을 할당하십시오
copy[key] = type(value) == "table" and deepCopy(value) or value
end
-- 완성된 복사 테이블의 최종 복사본을 반환합니다.
return copy
end

함수가 있는 상태에서 다음과 같은 깊은 복사본을 만들 수 있습니다.With the function in 플레이스, you can make a deep copy as follows:


local original = {
key = "value",
playerInfo = {
playerID = 505306092,
playerName = "PlayerName"
},
otherInfo = {
{
{1, 3, 5, 7, 9}
}
}
}
local clone = deepCopy(original)

얼음 테이블

테이블을 얼리면 읽기 전용이 되므로 원하지 않는 상수 값을 변경하지 않는 데 유용합니다. 얼리는 영구적이므로 table.isfrozen() 을 사용하여 얼리를 확인합니다. 테이블이 얼리면 Library.table. unfrozen() 을 사용하여 얼리를 해제하십시오.

얕은 동결

중첩된 테이블이 없는 테이블을 얼음 상태로 만들려면 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 _, v in target do
if type(v) == "table" then
deepFreeze(v)
end
end
end

함수가 있는 상태에서 다음과 같이 테이블을 깊이 얼릴 수 있습니다.With the function in 플레이스, you can deep freeze a table as follows:


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