Nội dung của một mảng thường cần phải được thay đổi, chẳng hạn như khi cần xóa một mục khỏi kho đồ của người chơi. Luau có các hàm tích hợp để sử dụng với bảng nhằm làm cho việc này dễ dàng hơn.
Bài viết này sẽ phác thảo các hàm đã được xây dựng sẵn cho bảng như thêm và xóa trong khi mô tả cách tìm kiếm một giá trị.
Để áp dụng những kỹ năng này, bạn sẽ tạo một kịch bản giúp quản lý kho đồ của người chơi.

Thêm giá trị vào mảng
Để thêm một giá trị mới vào một mảng, sử dụng table.insert(array, valueToInsert). Tham số thứ hai có thể là bất kỳ giá trị nào như chuỗi, số hoặc toàn bộ đối tượng, như Player hoặc IntValue.
Để thực hành, bạn sẽ tạo một kịch bản lưu trữ các mục của người chơi trong một bảng, sau đó thêm vào đó. Vì ví dụ này chỉ là một kịch bản, nó có thể được sử dụng với bất kỳ tệp hoặc dự án nào. Việc kiểm tra mã sẽ được thực hiện bằng cách sử dụng cửa sổ Output.
Tạo một mảng rỗng có tên là playerItems.
playerItems = {}Thêm các mục kho vào mảng bằng cách gõ table.insert(). Trong dấu ngoặc đơn, gõ playerItems, bảng để thêm vào, theo sau là một chuỗi cho mỗi mục. Thêm ít nhất ba giá trị.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")print(playerItems)Chạy dự án. Trong Output, mở rộng ba dấu chấm ... để xem bảng đã in.
Xóa giá trị khỏi mảng
Để xóa một giá trị, chẳng hạn như khi một người chơi đã sử dụng một mục hoặc một người nào đó trong danh sách người chơi đang hoạt động rời khỏi trò chơi, sử dụng table.remove(). Tùy thuộc vào các tham số được cung cấp, hàm có thể xóa giá trị cuối cùng của một bảng, hoặc tại một chỉ số cụ thể.
Xóa giá trị cuối cùng
Đôi khi một kịch bản cần xóa một mục cụ thể. Ví dụ, xóa mục đầu tiên trong kho đồ của người chơi, hoặc chọn người chơi đầu tiên trong danh sách. Để xóa giá trị cuối cùng trong một mảng, sử dụng table.remove(arrayName). Trong trường hợp này, tham số duy nhất cần thiết là bảng đó.
Sử dụng mảng các mục từ ví dụ trước. Sau đó, để xóa giá trị cuối cùng khỏi bảng, trong trường hợp này là "Sleeping Bag", gõ table.remove(playerItems)
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems)print(playerItems)Chạy dự án. Trong cửa sổ Output, giá trị cuối cùng, "Sleeping Bag", sẽ không được in ra.
Xóa theo chỉ số
Để xóa một giá trị tại một điểm cụ thể trong mảng, nhập vào tham số thứ hai chỉ số cần xóa, chẳng hạn như table.remove(arrayName, 1).
Sử dụng cùng một bảng, gõ table.remove(). Trong các tham số, nhập tên của bảng và 1, giá trị cần xóa.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems, 1)Chạy dự án. Kiểm tra rằng giá trị đầu tiên, "Potion" đã bị xóa.
Tìm kiếm giá trị trong một mảng
Để tìm các giá trị cụ thể trong các mảng, như tên của một người chơi chiến thắng, sử dụng hàm table.find(). Ngoài ra, bạn có thể lập trình hàm tìm kiếm của riêng mình bằng cách sử dụng các vòng lặp for và các câu lệnh if.
Tìm và trả về một giá trị duy nhất
Để tìm một giá trị trong một mảng, tạo một hàm có tên findValue() mà duyệt qua một mảng và dừng lại lần đầu tiên khi nó tìm thấy một giá trị khớp.
Khi nó tìm thấy giá trị, hàm sẽ sử dụng từ khóa return để trả về chỉ số của giá trị đó. Với một chỉ số, bạn có thể xóa nó khỏi mảng.
Sao chép mảng có tên playerItems dưới đây.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Lập trình một hàm mới có tên findValue() với hai tham số:
whichArray - mảng để tìm kiếm.
itemName - chuỗi cụ thể để kiểm tra.
local function findValue(whichArray, itemName)end
Trong findValue(), sử dụng một vòng lặp for để kiểm tra xem bất kỳ giá trị nào trong mảng có khớp với itemName không. Nếu giá trị khớp, sử dụng từ khóa return để trả về giá trị tìm thấy trong currentIndex.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendendKiểm tra hàm tìm kiếm bằng cách tạo một biến có tên valueFound và gọi findValue(). Truyền vào mảng để tìm kiếm, và giá trị mà nó nên tìm kiếm. Chạy mã để xác nhận rằng đầu ra mong đợi là chỉ số 2.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then--Gửi giá trị của currentIndex trở lạireturn currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("Giá trị nằm ở chỉ số " .. valueFound)
Xóa một giá trị
Nếu một giá trị được tìm thấy bằng cách sử dụng hàm tìm, nó có thể được xóa. Kiểm tra xem một giá trị có nằm trong valueFound không; nếu có, xóa giá trị đó bằng table.remove().
Kiểm tra xem một giá trị có trong valueFound không; nếu có, xóa giá trị bằng table.remove().
if valueFound thentable.remove(playerItems, valueFound)endIn ra mảng bằng mã dưới đây.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Chỉ số " .. index .. ": " .. itemString)endChơi thử và kiểm tra rằng giá trị đầu tiên "Bread" đã bị xóa khỏi mảng. Thử xóa các giá trị khác bằng cách thay đổi tham số thứ hai trong findValue().
Lưu ý rằng vì hàm này chỉ được gọi một lần, chỉ có thể xóa được trường hợp đầu tiên của "Bread". Phần tiếp theo sẽ đề cập đến cách tìm và xóa tất cả các trường hợp.
Tìm và xóa tất cả các giá trị cụ thể
Trong khi mã trước chỉ có thể xóa trường hợp đầu tiên của một giá trị được tìm thấy, đoạn mã này sẽ tìm và xóa tất cả các trường hợp từ một mảng. Ví dụ, nếu một người chơi muốn bán tất cả bánh mì của họ tại một cửa hàng trong trò chơi.
Sử dụng một mảng có tên playerItems với ít nhất bốn giá trị và một tập hợp các giá trị trùng lặp.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Để duyệt qua mảng, tạo một vòng lặp for đi ngược qua playerItems, bắt đầu từ #playerItems, kết thúc ở 1, và tăng dần bằng -1.
for index = #playerItems, 1, -1 doendTrong vòng lặp, sử dụng một câu lệnh if để kiểm tra xem giá trị bên trong playerItems[index] có bằng "Bread" không, và nếu có, xóa mục đó.
for index = #playerItems, 1, -1 doif playerItems[index] == "Bread" thentable.remove(playerItems, index)endendSử dụng mã dưới đây để thêm một vòng lặp for thứ hai in ra mảng.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Chỉ số " .. index .. ": " .. itemString)endChạy kịch bản và kiểm tra rằng tất cả các giá trị có tên "Bread" đã bị xóa.
Tóm tắt
Các giá trị có thể được xóa hoặc thêm vào một mảng, nhưng hãy cẩn thận với việc các chỉ số bị dịch chuyển khi làm như vậy. Sử dụng các vòng lặp để duyệt qua một bảng để xóa tất cả các trường hợp của một giá trị, hoặc chỉ trường hợp đầu tiên được tìm thấy.
Từ khóa return có thể được sử dụng để dừng một vòng lặp, và gửi thông tin trở lại nơi cần thiết.
Một phiên bản hoàn chỉnh của kịch bản có thể được tham khảo dưới đây.
Dự án sau bao gồm tất cả các kịch bản trong hướng dẫn này. Tải xuống tại đây.
Lưu ý rằng tất cả các kịch bản đều nằm trong ServerScriptService và đã bị vô hiệu hóa. Để sử dụng một kịch bản, trong thuộc tính của nó, bỏ chọn trường Disabled và chạy Studio.