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 giúp 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ó sẵn cho bảng như thêm và xóa đồng thời mô tả cách tìm kiếm một giá trị.
Để áp dụng các kỹ năng này, bạn sẽ tạo một script 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ảng, sử dụng table.insert(array, valueToInsert). Tham số thứ hai có thể là bất kỳ giá trị nào như một chuỗi, số, hoặc đối tượng hoàn chỉnh, chẳng hạn như Player hoặc IntValue.
Để thực hành, bạn sẽ tạo một script lưu trữ các vật phẩm của người chơi trong một bảng, sau đó thêm vào nó. Vì ví dụ này chỉ là một script, 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 trống tên là playerItems.
playerItems = {}Thêm các vật phẩm vào kho vào mảng bằng cách gõ table.insert(). Trong dấu ngoặc, gõ playerItems, bảng để thêm vào, theo sau là một chuỗi cho mỗi vật phẩm. 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 ba chấm ... để xem bảng được in ra.
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ón đồ hoặc ai đó trong danh sách người chơi hoạt động rời khỏi trải nghiệm, sử dụng table.remove(). Tùy thuộc vào các tham số được cung cấp, hàm này 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 script cần phải xóa một mục cụ thể. Ví dụ, xóa món đầ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 chính nó.
Sử dụng mảng các vật phẩm 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", không nên đượ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ố để 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ảng
Để tìm các giá trị cụ thể trong mảng, chẳng hạn như tên của người chơi thắng cuộc, sử dụng hàm table.find(). Ngoài ra, bạn có thể lập trình hàm tìm kiếm riêng của 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ảng, tạo một hàm tên là findValue() mà duyệt qua mảng và dừng lại lần đầu tiên khi tìm thấy một giá trị khớp.
Khi 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 bên dưới.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Lập trình một hàm mới tên là findValue() với hai tham số:
whichArray - mảng để tìm kiếm.
itemName - chuỗi cụ thể cần kiểm tra.
local function findValue(whichArray, itemName)end
Trong findValue(), sử dụng vòng lặp for để kiểm tra nếu bất kỳ giá trị nào trong mảng khớp với itemName. 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 cần 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 dự kiến 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 lạireturn currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("Giá trị ở chỉ số " .. valueFound)
Xóa một giá trị
Nếu một giá trị đã được tìm thấy sử dụng hàm tìm kiếm, nó có thể được xóa. Kiểm tra xem một giá trị có nằm trong valueFound hay không; nếu có, xóa giá trị đó bằng table.remove().
if valueFound thentable.remove(playerItems, valueFound)end
In ra mảng bằng mã dưới đây.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Chỉ số " .. index .. ": " .. itemString)endChạy thử nghiệm và kiểm tra rằng giá trị đầu tiên "Bread" đã bị xóa khỏi mảng. Hãy 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ó phiên bản đầu tiên của "Bread" được xóa. Phần tiếp theo sẽ đề cập cách tìm và xóa tất cả các phiên bản.
Tìm và xóa tất cả một giá trị cụ thể
Trong khi mã trước chỉ có thể xóa phiên bản đầ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 tên là playerItems với ít nhất bốn giá trị và một bộ 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 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 nếu giá trị bên trong playerItems[index] bằng "Bread", và nếu đúng, hãy xóa món đó.
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 mảng.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Chỉ số " .. index .. ": " .. itemString)endChạy script 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 dịch chuyển các chỉ số. Sử dụng vòng lặp để lặp qua một bảng để xóa tất cả các phiên bản của một giá trị, hoặc chỉ phiên bản đầ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 script có thể được tham khảo bên dưới.
Dự án tiếp theo bao gồm tất cả các script trong hướng dẫn này. Tải về tại đây.
Lưu ý rằng tất cả các script đều nằm trong ServerScriptService và đã bị vô hiệu hóa. Để sử dụng một script, trong các thuộc tính của nó, hãy bỏ chọn trường Disabled và chạy Studio.