Lua - 如何检查列表是否包含元素

我需要帮助我的 Lua 游戏脚本。我需要检查游戏中的库存是否包含列表中的任何 ID。

这是我的列表的一部分:

local Game_Items = {
    {id = 7436, name = "angelic axe", value = 5000},
    {id = 3567, name = "blue robe", value = 10000},
    {id = 3418, name = "bonelord shield", value = 1200},
    {id = 3079, name = "boots of haste", value = 30000},
    {id = 7412, name = "butcher's axe", value = 18000},
    {id = 3381, name = "crown armor", value = 12000}
}

下面的代码可能看起来有点奇怪,因为您不知道它是用来干什么的,但基本上它是这样的:上面的列表是我的游戏中的项目列表,而游戏中有一个存储物品和物品的库存。现在我想检查我的库存是否包含这些 ID 中的任何一个。

我尝试手动添加了 2 个 ID,它起作用了,但我的物品列表总共包含超过 500 个物品,我不想全部写出来。有办法把整个列表放进去并检查吗?

if not table.contains({ 3035, 3043, Game_Items[id] }, tempItemCounter.id) then

这是我到目前为止尝试的内容。前两个 ID 3035 和 3043 工作,然后我尝试了我的整个列表并仅检查了 ID。但我不知道该怎么做。那段代码不起作用。能否帮我将整个 ID 列表包含在 table.contains 中?

基本上想在那一行中包含整个列表,而不手动输入所有 ID。 Game_Items[id]不应该管用吗?难道里面的所有“ID”不都是“Game_Items”吗?

谢谢!

点赞
用户869951
用户869951

不,这并不意味着那样。如果 foo 是一个表,则 foo[id] 将查找在 foo 中被称为 id 的字段,例如一个字符串(因此,如果 id 是 1,则会得到 foo [1],如果 id 是 “bar”,则会得到 foo.bar 等)。

你不能一行完成它,但是可以创建一个函数,让你编写你的 if 条件。我不确定 tempItemCounter 是什么,但是假设你的库存是一个键映射到以下形式条目的映射:

inventory = {
    [1234] = {....},
    [1235] = {....},
    ...
}

每个整数键都是唯一的,假设你想要只有当所有项目都在库存中时才为真,则可以这样做:

function isAllInInventory(items, inventory)
    for i,item in ipairs(items) do
         if inventory[item.id] == nil
              return false
         end
    end
    return true
end

if isAllInInventory(Game_Items, inventory) then
    ...
end
2014-03-22 20:48:43