修改数组

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

数组的内容经常需要被更改,例如在需要从玩家的背包中移除物品时。Luau 提供了 内置函数 用于表,以简化此过程。

本文将概述用于表的预构建函数,例如添加和删除,同时描述如何搜索值。

为了应用这些技能,您将创建一个脚本来帮助管理玩家的背包。

向数组添加值

要向数组中添加新值,请使用 table.insert(array, valueToInsert)。第二个参数可以是任何值,例如字符串、数字或整个对象,如 PlayerIntValue

为了练习,您将创建一个脚本,将玩家物品存储在一个表中,然后对其进行添加。由于此示例只是一个脚本,因此可以与任何文件或项目一起使用。代码测试将在输出窗口中进行。

  1. 创建一个名为 playerItems 的空数组。


    playerItems = {}
  2. 通过输入 table.insert() 将库存物品添加到数组中。在括号内,输入 playerItems,即要添加的表,然后为每个物品输入一个字符串。插入至少三个值。


    playerItems = {}
    table.insert(playerItems, "药水")
    table.insert(playerItems, "面包")
    table.insert(playerItems, "睡袋")
    print(playerItems)
  3. 运行项目。在输出中,展开三个点 ... 以查看打印的表。

从数组中删除值

要删除一个值,比如如果玩家使用了一个物品,或者在一组活跃玩家中有某人离开体验,使用 table.remove()。根据提供的参数,该函数可以删除表中的最后一个值,或者在特定索引处进行删除。

删除最后一个值

有时脚本需要删除特定的物品。例如,删除玩家背包中的第一个物品,或选择列表中的第一个玩家。要删除数组中的最后一个值,请使用 table.remove(arrayName)。在此用例中,所需的唯一参数是表本身。

  1. 使用前面示例中的物品数组。然后,要从表中删除最后一个值,在这个例子中是 "睡袋",输入 table.remove(playerItems)


    playerItems = {}
    table.insert(playerItems, "药水")
    table.insert(playerItems, "面包")
    table.insert(playerItems, "睡袋")
    table.remove(playerItems)
    print(playerItems)
  2. 运行项目。在输出窗口中,最后一个值 "睡袋" 不应打印。

按索引删除

要在数组的特定位置删除值,在第二个参数中输入要删除的索引,例如 table.remove(arrayName, 1)

  1. 使用同一个表,输入 table.remove()。在参数中,输入表的名称和 1,要删除的值。


    playerItems = {}
    table.insert(playerItems, "药水")
    table.insert(playerItems, "面包")
    table.insert(playerItems, "睡袋")
    table.remove(playerItems, 1)
  2. 运行项目。检查第一个值 "药水" 是否被删除。

在数组中搜索值

要查找数组中的特定值,比如赢家的名字,使用 table.find() 函数。或者,您可以使用 for 循环和 if 语句编写自己的搜索函数。

查找并返回单个值

要在数组中查找一个值,创建一个名为 findValue() 的函数,该函数遍历数组,并在找到第一个匹配的值时停止。

一旦找到该值,函数将使用 return 关键字返回该值的索引。有了索引,您可以将其从数组中删除。

  1. 复制下面名为 playerItems 的数组。


    local playerItems = {
    "药水",
    "面包",
    "面包",
    "睡袋"
    }
  2. 编写一个新函数 findValue(),该函数有两个参数:

    • whichArray - 要搜索的数组。

    • itemName - 要检查的特定字符串。


      local function findValue(whichArray, itemName)
      end
  3. findValue() 中,使用 for 循环检查数组中是否有任何值与 itemName 匹配。如果值匹配,使用关键字 return 返回在 currentIndex 中找到的值。


    local function findValue(whichArray, itemName)
    for currentIndex = 1, #whichArray do
    if whichArray[currentIndex] == itemName then
    return currentIndex
    end
    end
    end
  4. 通过创建一个名为 valueFound 的变量并调用 findValue() 来测试搜索函数。传入要搜索的数组和要搜索的值。运行 代码以确认预期输出为索引 2。


    local function findValue(whichArray, itemName)
    for currentIndex = 1, #whichArray do
    if whichArray[currentIndex] == itemName then
    --返回 currentIndex 的值
    return currentIndex
    end
    end
    end
    local valueFound = findValue(playerItems, "面包")
    print("该值的索引为 " .. valueFound)

删除一个值

如果通过查找函数找到了一个值,可以将其删除。使用 if 语句检查是否找到了一个值。

  1. 检查 valueFound 中是否存在值;如果是,则使用 table.remove() 删除该值。


    if valueFound then
    table.remove(playerItems, valueFound)
    end
  2. 使用以下代码打印数组。


    for index = 1, #playerItems do
    local itemString = playerItems[index]
    print("索引 " .. index .. ": " .. itemString)
    end
  3. 进行游戏测试,检查第一个 "面包" 值是否从数组中删除。尝试通过更改 findValue() 中的第二个参数来删除其他值。

    请注意,由于此函数只调用了一次,因此仅删除了第一个实例的 "面包"。下一部分将介绍如何查找和删除所有实例。

查找并删除特定值的所有实例

虽然前面的代码只能删除找到的值的第一个实例,但此代码片段将查找并删除数组中的所有出现。例如,如果某个玩家希望在游戏内商店出售所有面包。

  1. 使用一个名为 playerItems 的数组,其中至少包含四个值和一组 重复 值。


    local playerItems = {
    "药水",
    "面包",
    "面包",
    "睡袋"
    }
  2. 为了遍历数组,创建一个 for 循环,从 #playerItems 开始倒序遍历,结束在 1,每次递减 1。


    for index = #playerItems, 1, -1 do
    end
  3. 在循环中,使用 if 语句检查 playerItems[index] 中的值是否等于 "面包",如果是,则删除该项。


    for index = #playerItems, 1, -1 do
    if playerItems[index] == "面包" then
    table.remove(playerItems, index)
    end
    end
  4. 使用以下代码添加第二个 for 循环来打印数组。


    for index = 1, #playerItems do
    local itemString = playerItems[index]
    print("索引 " .. index .. ": " .. itemString)
    end
  5. 运行脚本,检查所有名为 "面包" 的值是否被删除。

总结

可以向数组添加或删除值,但在操作时要小心索引的移动。使用循环遍历表以删除值的所有实例,或者仅删除找到的第一个实例。

可以使用 return 关键字停止循环,并在需要的地方返回信息。

您可以参考以下完成版的脚本。

以下项目包括本教程中的所有脚本。下载 这里

注意所有脚本都在 ServerScriptService 中并且 已禁用。要使用脚本,请在其属性中取消选中已禁用字段,然后运行工作室。

©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。