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.

Kiểu dữ liệu bảng có thể lưu trữ nhiều giá trị của bất kỳ kiểu nào không phải là nil, bao gồm các giá trị boolean, các số, các chuỗi, các hàm, và các bảng khác. Xây dựng bảng với dấu ngoặc nhọn ({}):


-- Tạo một bảng rỗng gán 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 từ điển. Mảng sử dụng danh sách số có thứ tự làm chỉ số, nhưng từ điển có thể có số, chuỗi và đối tượng làm chỉ số.

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

Mảng

Một mảng là một danh sách có thứ tự các giá trị. Mảng rất hữu ích để lưu trữ tập hợp dữ liệu, chẳng hạn như một nhóm người chơi có quyền hạn đặc biệt.

Tạo mảng

Để tạo một mảng bằng cách sử dụng bảng Luau, hãy khai báo các giá trị theo trình tự, cách nhau bằng dấu phẩy.


-- Tạo một mảng với ba mục
local testArray = {"Một chuỗi", 3.14159, true}
print(testArray)

Đọc từ mảng

Để đọc một mảng, thêm một cặp dấu ngoặc vuông sau tham chiếu của nó và chỉ định số chỉ mục của phần tử bên trong ([pos]):


-- Tạo một mảng với ba mục
local testArray = {"Một chuỗi", 3.14159, true}
print(testArray[1]) -- Một chuỗi
print(testArray[2]) -- 3.14159
print(testArray[3]) -- true

Ghi vào mảng

Để định nghĩa hoặc ghi lại giá trị của một mảng tại một chỉ số, hãy khai báo số chỉ số trong dấu ngoặc vuông ([index]) theo sau là = và giá trị:


local testArray = {"Một chuỗi", 3.14159, true}
testArray[2] = 12345
testArray[4] = "Chuỗi mới"
print(testArray[2]) -- 12345
print(testArray[4]) -- Chuỗi mới

Lặp qua mảng

Để lặp qua một mảng, bạn có thể sử dụng vòng lặp for. Bởi vì các mảng có chỉ số số, bạn cũng có thể sử dụng vòng lặp for số từ 1 đến độ dài của mảng (#array).


local testArray = {"Một chuỗi", 3.14159, true, "Chuỗi mới"}
-- Vòng lặp sử dụng lặp chung
for index, value in testArray do
print(index, value)
end
-- Lặp qua sử dụng toán tử độ dài mảng (#)
for index = 1, #testArray do
print(index, testArray[index])
end

Chèn mục

Có hai cách tích hợp sẵn để chèn một mục vào cuối của một mảng:

  • Truyền tham chiếu đến mảng và giá trị mục vào hàm table.insert() của Luau.
  • Thêm mục mới vào mảng bằng cú pháp array[#array+1].

local testArray = {"Một chuỗi", 3.14159}
table.insert(testArray, "Chuỗi mới")
testArray[#testArray+1] = "Một chuỗi mới khác"
print(testArray[3]) -- Chuỗi mới
print(testArray[4]) -- Một chuỗi mới khác

Để chèn một mục giữa đầu và cuối của một mảng, hãy bao gồm một giá trị vị trí làm đối số thứ hai của table.insert(). Điều này sẽ chèn mục mới và đẩy các mục theo sau lên một vị trí chỉ số.


local testArray = {"Mục đầu tiên", "Mục tiếp theo"}
table.insert(testArray, 2, "MỤC MỚI #2")
print(testArray[1]) -- Mục đầu tiên
print(testArray[2]) -- MỤC MỚI #2
print(testArray[3]) -- Mục tiếp theo

Xóa mục

Để xóa một mục khỏi mảng, sử dụng table.remove(). Điều này sẽ xóa mục ở vị trí chỉ định và di chuyển bất kỳ mục nào theo sau lùi lại một vị trí chỉ số.


local testArray = {"Mục đầu tiên", "Mục tiếp theo", "Mục cuối cùng"}
table.remove(testArray, 2)
print(testArray[1]) -- Mục đầu tiên
print(testArray[2]) -- Mục cuối cùng

Từ điển

Từ điển là một mở rộng của mảng. Từ điển lưu trữ một tập hợp các cặp khóa-giá trị, trong đó các khóa có thể là bất kỳ số nào, chuỗi nào hoặc đối tượng nào.

Tạo từ điển

Để tạo một bảng từ điển, định nghĩa mỗi khóa theo sau là =giá trị. Tách mỗi cặp khóa-giá trị bằng dấu phẩy:


local testDictionary = {
fruitName = "Chanh",
fruitColor = "Vàng",
sour = true
}

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


local part = Instance.new("Part")
local testDictionary = {
partType = "Khối",
[part] = true
}

Đọc từ từ điển

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


local part = Instance.new("Part")
local testDictionary = {
partType = "Khối",
[part] = true
}
-- Bao gồm dấu ngoặc cho các khóa chuỗi
print(testDictionary["partType"]) -- Khối
-- Hoặc sử dụng . để chỉ mục các khóa chuỗi không có dấu cách
print(testDictionary.partType) -- Khối
-- Bỏ dấu ngoặc cho các khóa không phải chuỗi
print(testDictionary[part]) -- true

Ghi vào từ điển

Để định nghĩa hoặc ghi lại giá trị của một khóa từ điển mới hoặc đã tồn tại, hãy khai báo tên khóa trong dấu ngoặc ([key]) hoặc, nếu khóa là một chuỗi, sử dụng (.key) theo sau là = và giá trị:


local testDictionary = {
fruitName = "Chanh",
sour = true
}
-- Thay đổi giá trị của các khóa đã tồn tại
testDictionary["fruitName"] = "Anh đào"
testDictionary.sour = false
-- Chèn cặp khóa-giá trị mới
testDictionary.fruitCount = 10
print(testDictionary.fruitName) -- Anh đào
print(testDictionary.sour) -- false
print(testDictionary.fruitCount) -- 10

Lặp qua từ điển

Để lặp qua một từ điển, sử dụng một vòng lặp for:


local testDictionary = {
fruitName = "Chanh",
fruitColor = "Vàng",
sour = true
}
for key, value in testDictionary do
print(key, value)
end
--[[ Kết quả xuất ra:
fruitName Chanh
sour true
fruitColor Vàng
]]

Xóa cặp khóa-giá trị

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


local testDictionary = {
fruitName = "Chanh",
fruitColor = "Vàng",
sour = true
}
testDictionary.sour = nil
for key, value in testDictionary do
print(key, value)
end
--[[ Kết quả xuất ra:
fruitName Chanh
fruitColor Vàng
]]

Bảng như là tham chiếu

Nếu bạn lưu trữ một bảng trong một biến mới, Luau sẽ 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 con trỏ, đến bảng gốc. Bất kỳ tham chiếu nào đến một bảng đều phản ánh bất kỳ thay đổi nào đối với bảng gốc:


local originalArray = {10, 20}
local arrayReference = originalArray
print("Bản gốc:", originalArray[1], originalArray[2])
print("Tham chiếu:", arrayReference[1], arrayReference[2])
-- Thay đổi giá trị trong mảng gốc
originalArray[1] = 1000
originalArray[2] = 2000
print("Tham chiếu:", arrayReference[1], arrayReference[2])
--[[ Kết quả xuất ra:
Bản gốc: 10 20
Tham chiếu: 10 20
Tham chiếu: 1000 2000
]]

Sao chép bảng

Sao chép nông

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


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

Sao chép sâu

Để sao chép một bảng phức tạp hơn với các bảng lồng bên trong, bạn sẽ cần sử dụng một hàm đệ quy tương tự như sau:


-- Hàm được sử dụng để sao chép sâu một bảng
local function deepClone(original)
-- Định nghĩa bảng mới cho bản sao
local clone = table.clone(original)
-- Lặp qua bảng gốc để kiểm tra các giá trị bảng
-- Nếu một bảng được tìm thấy dưới dạng giá trị, sao chép sâu nó vào khóa (chỉ số)
for key, value in original do
if type(value) == "table" then
clone[key] = deepClone(value)
end
end
-- Trả về bản sao không thay đổi của bảng sao chép sâu
return clone
end

Với hàm đã được thiết lập, bạn có thể thực hiện sao chép sâu như sau:


local original = {
key = "value",
playerInfo = {
playerID = 505306092,
playerName = "Tên Người Chơi"
},
otherInfo = {
{
{1, 3, 5, 7, 9}
}
}
}
local clone = deepClone(original)

Đóng băng bảng

Đóng băng một bảng làm cho nó chỉ đọc, điều này hữu ích để tạo ra các giá trị hằng mà bạn không muốn thay đổi. Việc đóng băng là vĩnh viễn; không có phương thức "mở khóa" hay "giải phóng". Để kiểm tra xem một bảng có bị đóng băng hay không, hãy sử dụng table.isfrozen().

Đóng băng nông

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


local target = {
key = "value",
engine = "Roblox",
playerID = 505306092
}
table.freeze(target)
target.playerID = 1 --> cố gắng sửa đổi một bảng chỉ đọc

Đóng băng sâu

Để đóng băng một bảng phức tạp hơn với các bảng lồng bên trong, sử dụng một hàm đệ quy tương tự như sau:


local function deepFreeze(target)
-- Đóng băng nông bảng
table.freeze(target)
-- Kiểm tra từng khóa của bảng và đóng băng nó nếu đó là một bảng
for _, value in target do
-- Đảm bảo giá trị không bị đóng băng; nếu nó đã bị, sẽ xảy ra lỗi
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(value)
end
end
end

Với hàm đã được thiết lập, bạn có thể đóng băng sâu một bảng như sau:


local target = {
key = "value",
playerInfo = {
playerID = 505306092,
playerName = "Tên Người Chơi"
},
otherInfo = {
{
{1, 3, 5, 7, 9}
}
}
}
deepFreeze(target)
target.playerInfo.playerID = 1 --> cố gắng sửa đổi một bảng chỉ đọc
©2026 Roblox Corporation. Roblox, logo Roblox và Powering Imagination là các nhãn hiệu đã đăng ký và chưa đăng ký của chúng tôi tại Hoa Kỳ và các quốc gia khác.