阵数组的内容常常需要更改,例如需要从玩家的道具中移除物品。 Lua 有 预建函数 可以用表与一起使用,以便这样更轻松。
本文将为您描述如何搜索值的表中的预建函数,例如添加和移除。
要应用这些技能,您将创建一个脚本,该帮助管理玩家的库存在游戏中。
将值添加到阵列
要将新值添加到阵数组中,请使用 table.insert(array, valueToInsert) 。第二个参数可以是任何值,例如字符串、数字或整个对象,例如 Player 或 IntValue 。
为了练习,您创建一个存储玩家物品在桌子上的表中的脚本,然后将其添加到它。 因为此示例是一个脚本,因此它可以与任何文件或项目添加。 测试代码将在输出窗口中进行。
创建一个名为 playerItems 的空阵列。
playerItems = {}使用 table.insert() 将库存项目添加到阵列。在括号中,输入 playerItems,跟随一个字符串为每个物品目添加表。至少添加三个值。
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")print(playerItems)运行项目。在输出中,扩展三个点 ... 以查看打印表。
从阵列中移除值
要移除值,例如玩家使用了一个物品或者列表中的玩家离开了体验,请使用 table.remove() 。 根据提供的参数,函数可以移除表中的最后一个值,或者在特定的索引上。
移除最后一个值
有时候脚本需要删除特定物品。例实例,移除玩家的物品栏中的第一个物品,或选择列表中的第一个玩家。要在阵数组中移除最后一个值,请使用 table.remove(arrayName) 。在此使用例子中,唯一需要的参数是表本身。
使用上一例的物品阵列。然后,在此例中,要从表中移除最后一个值,请使用 "Sleeping Bag",类型 table.remove(playerItems)
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems)print(playerItems)运行项目。在输出窗口中,最后一个值,"Sleeping Bag",不应该打印。
使用索引移除
要在阵数组中的特定位置移除值,请在第二个参数中输入索引,例如 table.remove(arrayName, 1) 。
使用相同的表,键入 table.remove() 。在参数中,输入表的名称和 1 ,值要移除移除。
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems, 1)运行项目。检查第一个值“Potion”是否已移除。
在阵列中搜索值
要在阵列中找到特定值,例如玩家名称,请使用 table.find() 函数。或者,您可以使用 for 循环和 if 声明来代码您自己的搜索函数。
寻找并返回一个单独的值
要在数组列中找到值,请创建一个名为 findValue() 的函数,该函数通过阵列并在第一次找到匹配值时停止。
找到值后,函数将使用 return 键来返回该值的索引。有了索引,您可以从数组列中移除它。
复制下面的 playerItems 阵列。
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}用两个参数命名为 findValue 的新函数:
whichArray - 搜索通过的阵列。
itemName - 具体的字符串以检查。
local function findValue(whichArray, itemName)end
在 findValue() 中,使用 for 循环检查 itemName 是否匹配到阵列中的任何值。如果值匹配,请使用关键字 return 返回找到在 1> currentIndex1> 中的值。
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendend测试搜索功能,创建一个名为 valueFound 的变量,并调用 findValue() 。 通过在阵列中传入搜索,并搜索该值。 运行 代码来确认输出的预期输出是索引 2 。
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then--将当前索引的值发送返回return currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("The value is at index " .. valueFound)
移除值
如果使用 find 函数找到值,可以将其移除。检查 if 声明中是否找到值。
检查值是否在 valueFound 中;如果是这样,请使用 table.remove() 移除值。
if valueFound thentable.remove(playerItems, valueFound)end使用以下代码打印阵列。
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)end测试并检查第一个 "Bread" 值是否从数组列中移除。尝试通过修改第二参数在 findValue() 中移除其他值。
注意,因为这个函数被调用一次,只有 "Bread" 的第一个实例被移除。下一节将探讨如何找到并移除所有实例。
查找并移除特定值的所有
虽然上一段代码只能移除发现值的第一个实例,但此代码片段将找到并删除所有发生在阵数组中的出现。例如,如果,说,一名玩家想在游戏商店出售他们的所有面包。
使用名为 playerItems 的阵列,至少包含四个值和一组 重复 。
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}要通过阵数组,创建一个从 后退 通过 playerItems ,开始于 #playerItems ,结束于 1 ,并且以 -1 增量。
for index = #playerItems, 1, -1 doend在循环中,使用 if 语句检查 playerItems[index] 中的值是否与 "Bread" 相同,并且如果是这样,请移除该物品。
for index = #playerItems, 1, -1 doif playerItems[index] == "Bread" thentable.remove(playerItems, index)endend使用以下代码添加一个循环,打印阵数组。
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)end运行脚本并检查所有名为“面包”的值是否都已删除。
概要
值可以被移除或添加到阵数组,但请注意值索引的移动。使用循环来通过表索引所有值的实例,或者只是第一个发现的实例。
关键字 return 可以用来停止循环,并在需要时发送信息回发。
脚本的完整版本可以在下面引用。
下面的项目包含本教程中的所有脚本。下载 在这里。
注意所有脚本都在 服务器脚本服务 和 禁用 。要使用脚本,请在其属性中取消 Disabled 字段,并运行 Studio。