Nội dung của một mat阵 thường phải được thay đổi, như khi cần phải xóa một mục từ kho đồ của một người chơi. Lua có chức năng xây dựng trước để sử dụng với các bảng để dễ dàng hơn.
Bài viết này sẽ xem xét các chức năng đã xây dựng cho các bảng như thêm và xóa khi 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 một người chơi trong trò chơi.
Thêm giá trị vào mảng
Để thêm một giá trị mới vào một bảng, hãy sử dụng table.insert(array, valueToInsert) . Tham số thứ hai có thể là bất kỳ giá trị như một 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 script để lưu vật phẩm người chơi trong một bảng và sau đó thêm vào nó. Vì đây chỉ là một script, nó có thể được sử dụng với bất kỳ tập tin hoặc dự án nào. Thử nghiệm mã sẽ được thực hiện bằng Cửa sổ Thoát.
Tạo một danh sách trống có tên playerItems .
playerItems = {}Thêm vật phẩm vào mảng bằng cách viết table.insert() . Trong dấu ngoặc, hãy nhập playerItems, bảng để thêm vào, sau đó là một chuỗi cho mỗi mục. Đăng nhập í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. TrongOutput, mở rộng ba dấu hiệu ... để xem bảng in.
Loại bỏ giá trị khỏi ma trận
Để loại bỏ một giá trị, chẳng hạn như nếu một người chơi sử dụng một món đồ hoặc ai đó trong danh sách người chơi đang rời khỏi một trải nghiệm, hãy 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ể loại bỏ giá trị cuố
Loại bỏ giá trị cuối cùng
Đôi khi một script cần phải xóa một thành vật phẩmcụ thể. Ví ví dụ / trường hợp, xóa một mục 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 mat阵, hãy sử dụng table.remove(arrayName) . Trong trường hợp này, một tham số duy n
Sử dụng mảng các mục từ ví dụ trước. Sau đó, để xóa giá trị cuối cùng từ bảng, trong trường hợp này "Sleeping Bag" , hãy nhập 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ổ Ra khỏi dự án, giá trị cuối cùng, "Sleeping Bag", không nên in.
Loại bỏ bằng chỉ mục
Để xóa một giá trị ở một điểm cụ thể trong ma trận, nhập vào thông số thứ hai để bỏ, chẳng hạn như table.remove(arrayName, 1) .
Sử dụng cùng một bảng, hãy table.remove() . Trong các biến, hãy nhập tên của bảng và 1 , giá trị để bỏ.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems, 1)Khởi 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 danh sách
Để tìm các giá trị cụ thể trong mảng, chẳng hạn như tên của một người chơi chiến thắng, hãy sử dụng chức năng table.find(). Hoặc, bạn có thể lập trình riêng của bạn tìm kiếm bằng cách sử dụng các lỗ for và if .
Tìm và Trả một Giá trị Đơn
Để tìm giá trị trong một mat阵, tạo một hàm tên là findValue() đi qua một mat阵 và dừng lại lần đầu tiên nó tìm thấy giá trị trùng khớp.
Một khi nó tìm thấy giá trị, chức năng sẽ sử dụng cụm từ return để trả lại mục đã tìm đó. Với một mục, bạn có thể loại bỏ nó khỏi danh sách.
Bạn dưới đây có một danh sách gọi là playerItems .
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Lập một chức năng mới có tên là findValue() với hai tham số:
whichArray - là một loại bảng để tìm kiếm.
itemName - một dãy chuỗi cụ thể để kiểm tra.
local function findValue(whichArray, itemName)end
Trong findValue(), hãy sử dụng một for lặp để kiểm tra xem có phù hợp giá trị trong mảng itemName . Nếu giá trị trùng khớp, hãy sử dụng từ khóa return để trả lại giá trị đã tìm thấy trong 1> currentIndex1> .
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendendThử nghiệm chức năng tìm kiếm bằng cách tạo một biến tên là valueFound và gọi findValue() . Pass trong hàng để tìm kiếm, và giá trị nào nó nên tìm kiếm. Chạy mã để xác nhận rằng kết quả mong đợi là index 2.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then--Gửi giá trị của hiện tạiIndex trở quay lạireturn currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("The value is at index " .. valueFound)
Loại bỏ một giá trị
Nếu một giá trị được tìm thấy bằng chức năng tìm, nó có thể được xóa. Xem xét nếu một giá trị được tìm thấy bằng một if statement.
Kiểm tra xem một giá trị có ở trong valueFound ; nếu vậy, xóa giá trị bằng cách sử dụng table.remove() .
if valueFound thentable.remove(playerItems, valueFound)endIn mảng bằng cách sử dụng mã bên dưới.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endPlaytest và kiểm tra rằng giá trị đầu tiên của "Bread" đã được xóa khỏi danh sách. Cố gắng 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ì chức năng này đã được gọi một lần, chỉ có một phiên bản đầu tiên của "Bread" được xóa. Phần tiếp theo sẽ xem xét cách tìm và xóa tất cả các phiên bản.
Tìm và loại bỏ tất cả một giá trị cụ thể
Mặc dù mã trước đó chỉ có thể xóa một mục đầu tiên của giá trị được tìm thấy, nhưng các câu lệnh này sẽ tìm và xóa tất cả các mối quan hệ từ một bảng. Ví dụ, nếu, nói, một người chơi muốn bán tất cả bánh của họ ở một cửa hàng trong trò chơi.
Sử dụng một bảng tên là playerItems với ít nhất bốn giá trị và một bộ dữ liệu duplicates .
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Để đi qua danh sách, tạo một for loop đi qua qua playerItems , bắt đầu tại #playerItems và kết thúc tại 1, và tăng dần bằng -1.
for index = #playerItems, 1, -1 doendTrong câu trò chuyển, sử dụng một if statement để kiểm tra xem giá trị bên trong playerItems[index] tương đương với "Bread" , và nếu vậy, hãy xóa vật phẩm.
for index = #playerItems, 1, -1 doif playerItems[index] == "Bread" thentable.remove(playerItems, index)endendSử dụng mã bên dưới để thêm một for loop in which prints the array.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endChạy script và kiểm tra tất cả các giá trị được gọi là "Bread" đã bị xóa.
Tổng kết
Giá trị có thể được xóa hoặc thêm vào một danh sách, nhưng hãy cẩn thận về việc dịch chuyển hàng tabela, làm cho nó. Sử dụng lặp lại để lặp qua một bảng để xóa tất cả các mục của giá trị, hoặc chỉ một mục đầu tiên được tìm thấy.
Người khóa từ khóa return có thể được sử dụng để ngừng lại một lần, và gửi thông tin trở lại nơi cần thiết.
Một phiên bản hoàn thành của script có thể được tham khảo ở dưới đây.
Dự án sau đây bao gồm tất cả các script trong hướng dẫn này. Tải xuống ở đây .
Ghi chú tất cả các script ở ServerScriptService và bị vô hiệu hóa . Để sử dụng một script, trong các tính năng của nó, huỷ chọn lựa đọc Disabled và chạy Studio.