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

时间:2014-03-22 19:43:45

标签: arrays list lua element

我需要一些关于游戏的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。但我不知道该怎么做。该代码不起作用。任何人都可以帮我在table.contains中包含整个id列表吗?

基本上想要将我的整个列表包含在该行中,而无需手动输入所有ID。 Game_Items [id]不应该有效吗?这不是指“Game_Items”中的所有“id”吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

不,这并不意味着。如果foo是一个表,那么foo [id]会在foo中查找一个被调用的字段,例如一个字符串(如果id为1,那么如果id为"则id为1)吧"你会得到foo.bar等)。

您不能在一行中执行此操作,但您可以创建一个允许您编写if条件的函数。我不确定tempItemCounter是什么,但假设您的广告资源是表单条目的键映射

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

其中每个整数键都是唯一的,并且假设只有当所有项目都在库存中时才需要为true,那么您可以这样做:

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