对阵列进行更改

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

阵数组的内容常常需要更改,例如需要从玩家的道具中移除物品。 Lua 有 预建函数 可以用表与一起使用,以便这样更轻松。

本文将为您描述如何搜索值的表中的预建函数,例如添加和移除。

要应用这些技能,您将创建一个脚本,该帮助管理玩家的库存在游戏中。

将值添加到阵列

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

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

  1. 创建一个名为 playerItems 的空阵列。


    playerItems = {}
  2. 使用 table.insert() 将库存项目添加到阵列。在括号中,输入 playerItems,跟随一个字符串为每个物品目添加表。至少添加三个值。


    playerItems = {}
    table.insert(playerItems, "Potion")
    table.insert(playerItems, "Bread")
    table.insert(playerItems, "Sleeping Bag")
    print(playerItems)
  3. 运行项目。在输出中,扩展三个点 ... 以查看打印表。

从阵列中移除值

要移除值,例如玩家使用了一个物品或者列表中的玩家离开了体验,请使用 table.remove() 。 根据提供的参数,函数可以移除表中的最后一个值,或者在特定的索引上。

移除最后一个值

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

  1. 使用上一例的物品阵列。然后,在此例中,要从表中移除最后一个值,请使用 "Sleeping Bag",类型 table.remove(playerItems)


    playerItems = {}
    table.insert(playerItems, "Potion")
    table.insert(playerItems, "Bread")
    table.insert(playerItems, "Sleeping bag")
    table.remove(playerItems)
    print(playerItems)
  2. 运行项目。在输出窗口中,最后一个值,"Sleeping Bag",不应该打印。

使用索引移除

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

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


    playerItems = {}
    table.insert(playerItems, "Potion")
    table.insert(playerItems, "Bread")
    table.insert(playerItems, "Sleeping bag")
    table.remove(playerItems, 1)
  2. 运行项目。检查第一个值“Potion”是否已移除。

在阵列中搜索值

要在阵列中找到特定值,例如玩家名称,请使用 table.find() 函数。或者,您可以使用 for 循环和 if 声明来代码您自己的搜索函数。

寻找并返回一个单独的值

要在数组列中找到值,请创建一个名为 findValue() 的函数,该函数通过阵列并在第一次找到匹配值时停止。

找到值后,函数将使用 return 键来返回该值的索引。有了索引,您可以从数组列中移除它。

  1. 复制下面的 playerItems 阵列。


    local playerItems = {
    "Potion",
    "Bread",
    "Bread",
    "Sleeping Bag"
    }
  2. 用两个参数命名为 findValue 的新函数:

    • whichArray - 搜索通过的阵列。

    • itemName - 具体的字符串以检查。


      local function findValue(whichArray, itemName)
      end
  3. findValue() 中,使用 for 循环检查 itemName 是否匹配到阵列中的任何值。如果值匹配,请使用关键字 return 返回找到在 1> currentIndex1> 中的值。


    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
    --将当前索引的值发送返回
    return currentIndex
    end
    end
    end
    local valueFound = findValue(playerItems, "Bread")
    print("The value is at index " .. valueFound)

移除值

如果使用 find 函数找到值,可以将其移除。检查 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 " .. index .. ": " .. itemString)
    end
  3. 测试并检查第一个 "Bread" 值是否从数组列中移除。尝试通过修改第二参数在 findValue() 中移除其他值。

    注意,因为这个函数被调用一次,只有 "Bread" 的第一个实例被移除。下一节将探讨如何找到并移除所有实例。

查找并移除特定值的所有

虽然上一段代码只能移除发现值的第一个实例,但此代码片段将找到并删除所有发生在阵数组中的出现。例如,如果,说,一名玩家想在游戏商店出售他们的所有面包。

  1. 使用名为 playerItems 的阵列,至少包含四个值和一组 重复


    local playerItems = {
    "Potion",
    "Bread",
    "Bread",
    "Sleeping Bag"
    }
  2. 要通过阵数组,创建一个从 后退 通过 playerItems ,开始于 #playerItems ,结束于 1 ,并且以 -1 增量。


    for index = #playerItems, 1, -1 do
    end
  3. 在循环中,使用 if 语句检查 playerItems[index] 中的值是否与 "Bread" 相同,并且如果是这样,请移除该物品。


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


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

概要

值可以被移除或添加到阵数组,但请注意值索引的移动。使用循环来通过表索引所有值的实例,或者只是第一个发现的实例。

关键字 return 可以用来停止循环,并在需要时发送信息回发。

脚本的完整版本可以在下面引用。

下面的项目包含本教程中的所有脚本。下载 在这里

注意所有脚本都在 服务器脚本服务禁用 。要使用脚本,请在其属性中取消 Disabled 字段,并运行 Studio。