Thay đổi các mảng Make changes to arrays

*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.

Nội dung của một array thường phải được thay đổi, giống như khi cần phải xóa một vật phẩm khỏi kho đồ của người chơi.Luau có chức năng tích hợp sẵn để sử dụng với bảng để làm cho việc này dễ dàng hơn.

Bài viết này sẽ mô tả các chức năng được xây dựng trước cho các 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 các kỹ năng này, bạn sẽ tạo một kịch bản giúp quản lý kho đồ của một người chơi trong một trò chơi.

Thêm giá trị vào mảng

Để thêm một giá trị mới vào một array, hãy 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 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 các mục người chơi trong một bảng, sau đó thêm vào nó.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 tin hoặc dự án nào.Thử nghiệm mã sẽ được thực hiện bằng cửa sổ Thành phẩm.

  1. Tạo một mảng trống có tên là playerItems.


    playerItems = {}
  2. Thêm các mục tồn kho vào mảng bằng cách gõ table.insert() .Trong dấu ngoặc, hãy nhập playerItems , bảng cần thêm, sau đó là một chuỗi cho mỗi vật phẩm.Nhập ít nhất ba giá trị.


    playerItems = {}
    table.insert(playerItems, "Potion")
    table.insert(playerItems, "Bread")
    table.insert(playerItems, "Sleeping Bag")
    print(playerItems)
  3. Chạy dự án. Ở Output, mở rộng ba điểm ... để xem bảng in.

Xóa giá trị từ mảng

Để xóa một giá trị, như nếu một người chơi sử dụng một vật phẩm hoặc ai đó trong danh sách các 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, chức năng có thể xóa giá trị cuối cùng của một bảng hoặc tại một chỉ mục cụ thể.

Xóa giá trị cuối cùng

Đôi khi một kịch bản cần xóa một vật phẩmcụ thể.Ví ví dụ / trường hợp, 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 sử dụng này, tham số duy nhất cần thiết là bảng chính.

  1. 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 từ bảng, trong trường hợp này "Sleeping Bag" , nhập table.remove(playerItems)


    playerItems = {}
    table.insert(playerItems, "Potion")
    table.insert(playerItems, "Bread")
    table.insert(playerItems, "Sleeping bag")
    table.remove(playerItems)
    print(playerItems)
  2. Chạy dự án. Trong cửa sổ Thành phẩm, 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ị tại một điểm cụ thể trong mảng, nhập vào tham số thứ hai chỉ mục cần bỏ, chẳng hạn như table.remove(arrayName, 1) .

  1. Sử dụng cùng một bảng, nhập table.remove() . Trong các tham số, 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)
  2. Chạy dự án. Kiểm tra xem giá trị đầu tiên, "Potion" đã bị xóa.

Tìm giá trị trong một array

Để tìm các giá trị cụ thể trong mảng, 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().Ngoài ra, bạn có thể viết chức năng tìm kiếm riêng của mình bằng cách sử dụng vòng lặp for và tuyên bố if.

Tìm và trả về một giá trị duy nhất

Để tìm một giá trị trong một array, tạo một chức năng có tên findValue() đi qua một array và dừng lại lần đầu tiên nó tìm thấy một giá trị phù hợp

Khi nó tìm thấy giá trị, chức năng sẽ sử dụng từ khóa return để trả lại chỉ mục của giá trị đó. Với một chỉ mục, bạn có thể xóa nó khỏi mảng.

  1. Sao chép mảng có tên playerItems dưới đây.


    local playerItems = {
    "Potion",
    "Bread",
    "Bread",
    "Sleeping Bag"
    }
  2. Mã hóa một chức năng mới có tên findValue() với hai tham số:

    • whichArray - mảng để tìm kiếm qua.

    • itemName - chuỗi cụ thể để kiểm tra.


      local function findValue(whichArray, itemName)
      end
  3. Trong findValue(), sử dụng một vòng lặp for để kiểm tra xem có bất kỳ giá trị nào trong array phù hợp với itemName không.Nếu giá trị phù hợp, sử dụng từ khóa return để trả lại giá trị được tìm thấy trong currentIndex .


    local function findValue(whichArray, itemName)
    for currentIndex = 1, #whichArray do
    if whichArray[currentIndex] == itemName then
    return currentIndex
    end
    end
    end
  4. Thử chức năng tìm kiếm bằng cách tạo một biến có tên là valueFound và gọi findValue().Vượt qua mả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 đầu ra mong đợi là mục lục 2.


    local function findValue(whichArray, itemName)
    for currentIndex = 1, #whichArray do
    if whichArray[currentIndex] == itemName then
    --Gửi giá trị của currentIndex quay lạilại
    return currentIndex
    end
    end
    end
    local valueFound = findValue(playerItems, "Bread")
    print("The value is at index " .. valueFound)

Xóa một giá trị

Nếu một giá trị được tìm thấy bằng chức năng tìm kiếm, nó có thể được xóa. Kiểm tra xem có giá trị được tìm thấy bằng cách sử dụng câu lệnh if không.

  1. Kiểm tra xem có giá trị nào nằm trong valueFound ; nếu có, xóa giá trị bằng cách sử dụng table.remove() .


    if valueFound then
    table.remove(playerItems, valueFound)
    end
  2. In ra mảng bằng mã dưới đây.


    for index = 1, #playerItems do
    local itemString = playerItems[index]
    print("Index " .. index .. ": " .. itemString)
    end
  3. Thử nghiệm và kiểm tra xem 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ì chức năng này đã được gọi một lần, chỉ ví dụ đầu tiên của "Bread" đã bị xóa.Phần tiếp theo sẽ bao gồm cách tìm và xóa tất cả các ví dụ.

Tìm và xóa tất cả một giá trị cụ thể

Trong khi mã trước chỉ có thể xóa ví dụ đầu tiên của một giá trị được tìm thấy, thành phần mã này sẽ tìm và xóa tất cả các xảy ra từ một mảng.Ví dụ, nếu, nói, 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.

  1. Sử dụng một array có tên là playerItems với ít nhất bốn giá trị và một bộ sao chép .


    local playerItems = {
    "Potion",
    "Bread",
    "Bread",
    "Sleeping Bag"
    }
  2. Để đi qua mảng, tạo một vòng lặp for đi lùi qua playerItems, bắt đầu tại #playerItems, kết thúc tại 1 và tăng bằng -1.


    for index = #playerItems, 1, -1 do
    end
  3. Trong vòng lặp, sử dụng một tuyên bố if để kiểm tra xem giá trị bên trong playerItems[index] có bằng với "Bread" hay không, và nếu có, xóa vật phẩm.


    for index = #playerItems, 1, -1 do
    if playerItems[index] == "Bread" then
    table.remove(playerItems, index)
    end
    end
  4. Sử dụng mã bên dưới để thêm một giây cho vòng lặp in mảng.


    for index = 1, #playerItems do
    local itemString = playerItems[index]
    print("Index " .. index .. ": " .. itemString)
    end
  5. Chạy lệnh và kiểm tra xem tất cả các giá trị có tên là "Bánh" đã bị xóa.

Tổng quát

Giá trị có thể được xóa hoặc thêm vào một array, nhưng hãy cẩn thận với các chỉ mục di chuyển làm như vậy.Sử dụng vòng lặp để lặp qua một bảng để xóa tất cả các instanz của một giá trị, hoặc chỉ instanz đầu tiên được tìm thấy.

Từ khóa return có thể được sử dụng để ngăn chặn một vòng lặp và gửi lại thông tin cần thiết.

Một phiên bản hoàn thành của kịch bản có thể tham chiếu dưới đây.

Dự án sau đây bao gồm tất cả các kịch bản trong hướng dẫn này. Tải xuống ở đây .

Lưu ý tất cả các kịch bản đều ở trong ServerScriptServicebị vô hiệu hóa .Để sử dụng một kịch bản, trong các thuộc tính của nó, hãy bỏ chọn trường Tắt và chạy Studio.