Bảng

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Dữ liệu bảng dữ liệu có thể lưu trữ nhiều giá trị của bất kỳ loại nào không phải là nil , bao gồm booleans , 1> số1> , 4> chuỗi4> , 7> hàm7> và các bảng khá


-- Xây dựng một bảng trống được giao cho biến "t"
local t = {}
print(t) -- {}

Bạn có thể sử dụng một bảng như một mảng hoặc một từ điển . Mảng sử dụng một danh sách đã sắp xếp của các số như 索引 , nhưng từ điển có thể có các số, chuỗi và đối tượng như 1>索引1> .

Để biết thêm thông tin về các hàm tích hợp để làm việc với các bảng, xem thư viện table.

Ma trận

Một ma trận là một danh sách được sắp xếp của các giá trị. Các ma trận hữu ích để lưu trữ các bộ sưu tập dữ liệu, chẳng hạn như một nhóm người chơi với quyền truy cập đặc biệt.

Tạo bảng

Để tạo một table Luau, tuyên bố giá trị trong thứ tự theo thứ tự, được phân cách bởi các dấu chấm câu.


-- Xây dựng một mat阵 với ba mục
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray)

Đọc từ bảng đọc

Để đọc từ một dàn đọc, hãy thêm một cặp dấu chéo sau tham chiếu của nó và xác định số mục tham chiếu của thành phần bên trong ([pos]]:


-- Xây dựng một mat阵 với ba mục
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray[1]) -- Một chuỗi
print(testArray[2]) -- 3.14159
print(testArray[3]) -- Camera

Lập trình vào bảng dữ liệu

Để định hoặc viết lại giá trị của một hàm ở một chỉ mục, xác định số chỉ mục trong dấu chéo vuông ( [index] ) được kết thúc bằng dấu chéo vuông ( = ) và giá trị:


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

Lặp lại trên các ma trận

Để lặp lại một dàn trượt, bạn có thể sử dụng một vòng lặp for. Bởi vì các dàn trượt có các chỉ số thuận số, bạn cũng có thể sử dụng một vòng lặp for từ 1 đến chiều dài của dàn trượt ( 1>#


local testArray = {"A string", 3.14159, workspace.Camera, "New string"}
-- Lặp lại sử dụng general iteration
for index, value in testArray do
print(index, value)
end
-- Lặp lại bằng hàm số độ dài bảng (#)
for index = 1, #testArray do
print(index, testArray[index])
end
--[[ Kết quả ra:
1 A string
2 3.14159
3 Camera
4 New string
1 A string
2 3.14159
3 Camera
4 New string
]]

Thêm vật

Có hai cách được tích hợp để xuất một mục vào cuối end của một danh sách:

  • Truyền một tham chiếu đến bảng trượt tuyết và giá trị mục để hàm table.insert() của Luau.
  • Thêm món đồ mới vào dàn đề bằng cách sử dụng cú array[#array+1] .

local testArray = {"A string", 3.14159}
table.insert(testArray, "New string")
testArray[#testArray+1] = "Another new string"
print(testArray[3]) -- Chuỗi chuỗi
print(testArray[4]) -- Another new string

Để đặt một mục đồ trong khoảng giữa và kết thúc của một danh sách, hãy bao gồm giá trị vị trí như thứ hai của table.insert() . Điều này đặt mục đồ mới và đẩy các mục đồ theo một vị trí chỉ số.


local testArray = {"First item", "Next item"}
table.insert(testArray, 2, "NEW ITEM #2")
print(testArray[1]) -- vật phẩmđầu tiên
print(testArray[2]) -- Vật phẩm mới #2
print(testArray[3]) -- Next item

Loại bỏ các mục

Để xóa một mục khỏi một danh sách, hãy sử dụng table.remove() . Điều này xóa mục ở vị trí được chỉ định và di chuyển bất kỳ mục tiếp theo đến một vị trí chỉ mục.


local testArray = {"First item", "Next item", "Last item"}
table.remove(testArray, 2)
print(testArray[1]) -- vật phẩmđầu tiên
print(testArray[2]) -- Last item

Từ điển

Các từ điển là một mở rộng của các dàn trượt. Từ điển lưu một bộ dữ liệu của các cặp giá trị chìa khóa, nơi các chìa khóa có thể là bất kỳ số, chuỗi hoặc đối tượng.

Tạo từ điển

Để tạo một bảng từ điển, xác định mỗi chìa khóa được theo sau bởi = và giá trị . Tách cặp chìa khóa-giá trị với dấu phẩy:


local testDictionary = {
FruitName = "Lemon",
FruitColor = "Yellow",
Sour = true
}

Các chìa khóa cho từ điển có thể là số, chuỗi và đối tượng. Ví dụ, một chìa khóa có thể cũng là một Instance . Để sử dụng đối tượng như chìa khóa, hãy tuyên bố chìa khóa trong ngoặc vuông ( [key] ):


local part = Instance.new("Part")
local testDictionary = {
PartType = "Block",
[part] = true
}

Đọc từ các từ điển

Để đọc từ một từ điển, thêm một cặp dấu chéo sau tham chiếu của nó và xác định tên chìa khóa. Tham khảo trực tiếp một chuỗi chìa khóa bằng cách sử dụng dấu chéo ( ["key"] ) hoặc sử dụng giá trị biến ( [key] ).


local part = Instance.new("Part")
local testDictionary = {
PartType = "Block",
[part] = true
}
-- Bao gồm dấu chấm câu cho các chìa khóa chuỗi
print(testDictionary["PartType"]) -- Chặn
-- Thông báo nối dấu cho các chìa khóa không phải là chuỗi
print(testDictionary[part]) -- true

Viết vào Từ điển

Để định nghĩa hoặc viết lại giá trị của một cái chìa khóa từ điển mới hoặc hiện tại, xác định tên cái chìa khóa trong dấu ngoặc ( [key] ) đi theo sau bởi = và giá trị:


local testDictionary = {
FruitName = "Lemon",
Sour = true
}
-- Đổi giá trị của các chìa khóa hiện có
testDictionary["FruitName"] = "Cherry"
testDictionary["Sour"] = false
-- Nhúc nhích cặp giá trị mới
testDictionary["FruitCount"] = 10
print(testDictionary["FruitName"]) -- Anh đào
print(testDictionary["Sour"]) -- đúng
print(testDictionary["FruitCount"]) -- 10

Lặp lại trên các từ điển

Để lặp lại trên một từ điển, hãy sử dụng hàm toàn cầu pairs() trong một vòng lặp for :


local testDictionary = {
FruitName = "Lemon",
FruitColor = "Yellow",
Sour = true
}
for key, value in pairs(testDictionary) do
print(key, value)
end
--[[ Kết quả ra:
FruitName Lemon
Sour true
FruitColor Yellow
]]

Loại bỏ các cặp giá trị Key

Để xóa hoặc xóa một cặp giá trị chìa khóa từ một từ điển, hãy đặt giá trị của nó cho một chìa khóa thành nil .


local testDictionary = {
FruitName = "Lemon",
FruitColor = "Yellow",
Sour = true
}
testDictionary["Sour"] = nil
for key, value in pairs(testDictionary) do
print(key, value)
end
--[[ Kết quả ra:
FruitName Lemon
FruitColor Yellow
]]

Bảng như một tham chiếu

Nếu bạn lưu một bảng vào một biến mới, Luau không tạo một bản sao của bảng đó. Thay vào đó, biến trở thành một tham chiếu , hoặc một mũi tên, đến bảng nguyên bản. Bất kỳ tham chiếu nào về một bảng đều phản ánh bất kỳ thay đổi nào đối với bảng


local originalArray = {10, 20}
local arrayReference = originalArray
print("Original:", originalArray[1], originalArray[2])
print("Reference:", arrayReference[1], arrayReference[2])
-- Đổi giá trị trong ma trận nguyên bản
originalArray[1] = 1000
originalArray[2] = 2000
print("Reference:", arrayReference[1], arrayReference[2])
--[[ Kết quả ra:
Original: 10 20
Reference: 10 20
Reference: 1000 2000
]]

Bảng sao chép

Nhân bản nông thông thường

Để sao chép một bảng không có bất kỳ bảng con của bảng, Luau cung cấp phương thức table.clone() .


local original = {
key = "value",
engine = "Roblox",
playerID = 505306092
}
local clone = table.clone(original)

Nhân bản sâu

Để sao chép một bảng dữ liệu phức tạp hơn với các bảng con bên trong nó, bạn sẽ cần phải sử dụng một hàm recursive tương tự như theo dõi:


-- Hàm được sử dụng để sao chép một bảng sâu
local function deepCopy(original)
-- Định nghĩa bảng mới cho bản sao
local copy = {}
-- Lặp qua bảng gốc để sao chép
for key, value in original do
-- Nếu kiểu giá trị là một bảng, sao chép nó sâu vào chìa khóa (索引)
-- Else (hoặc) kiểu không phải là một bảng, hãy gán giá trị mặc định cho chỉ mục thay vào đó
copy[key] = type(value) == "table" and deepCopy(value) or value
end
-- Trả lại bản sao cuối cùng của bảng clon深
return copy
end

Với chức năng này, bạn có thể tạo một bản sao sâu như sau:


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

Bảng băng

Đóng băng một bảng làm cho nó chỉ đọc, which là hữu ích cho việc tạo ra các giá trị t�� thôi mà bạn không muốn thay đổi. Đóng băng là vĩnh viễn; không có phương pháp "unfreeze" hoặc "thaw". Để kiểm tra nếu bảng đã đóng băng, hãy sử dụng Library.table.isfrozen()</

Đóng băng nông thông thường

Để đóng băng một bảng không có bất kỳ bảng con nào, Luau cung cấp phương pháp table.freeze() .


local target = {
key = "value",
engine = "Roblox",
playerID = 505306092
}
table.freeze(target)
target.playerID = 1 --> attempt to modify a readonly table

Đóng băng sâu

Để đóng băng một bảng phức tạp hơn với các bảng tổng quát bên trong nó, hãy sử dụng một hàm recursive tương tự như theo dõi:


local function deepFreeze(target)
-- Đóng băng bảng dưới
table.freeze(target)
-- Kiểm tra mỗi chìa khóa trong bảng và đóng băng nó nếu đó là một bảng
for _, v in target do
if type(v) == "table" then
deepFreeze(v)
end
end
end

Với chức năng này, bạn có thể đóng băng một bảng dưới đây:


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