将变量与 Lua 表中的所有变量进行比较?

Posted

技术标签:

【中文标题】将变量与 Lua 表中的所有变量进行比较?【英文标题】:Compare a variable to all the variables from a Lua table? 【发布时间】:2021-01-02 10:40:13 【问题描述】:

我是一个新的 Lua 用户,我有一些关于将变量与表中的多个值进行比较的问题。

那么,让我们开始吧。

我有一个名为“PLATE”的变量,它等于“AAA 111”。

我还有一个名为“VEHICLES”的表,它有多个类似于 PLATE 的值,例如:AAA 333、AAA 222、AAA 111。

我使用脚本来检查 PLATE 是否等于表中的值。这是脚本:


for i = 1, #Vehicles, 1 do

  if PLATE == Vehicles[i].plate then 
    -- do action
  elseif PLATE ~= Vehicles[i].plate then
    -- do  2 action
  end
end

因为 AAA 111 有索引 3,它首先检查索引 1 和索引 2,然后运行第二个操作。但是,我不希望这种情况发生。我不想先检查表中的所有值,如果它们中的 NONE 是 AAA 111 来运行第二个操作。有没有办法做到这一点?非常感谢!

【问题讨论】:

这能回答你的问题吗? How to check if a table contains an element in Lua? 【参考方案1】:

您可以使用 Lua Table-as-Set 来做到这一点。

plates = 

function addToSet(set, key) --see the linked answer for more functions like this
    set[key] = true
end

function setContains(set, key)
    return set[key] ~= nil
end

function checkPlate(PLATE)
  if setContains(plates, PLATE) then
    print("One of the plates is", PLATE)
  else
    print("There is no plate", PLATE)
  end
end

addToSet(plates, "AAA 111")
addToSet(plates, "AAA 123")

local PLATE = "AAA 123"
checkPlate(PLATE)

PLATE = "AAA 456"
checkPlate(PLATE)

输出:

One of the plates is    AAA 123
There is no plate   AAA 456

这也比循环更有效,如果您想更改板块表以包含有关板块的更多信息,请使用板块作为字典键,即:

plates = 
    ["AAA 123"] = 
          ["registered"] = '1/2/3'
    

只要对 addToSet 函数稍作修改,它仍然可以工作。

【讨论】:

以上是关于将变量与 Lua 表中的所有变量进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

将不同变量的值与其他组和自我进行比较

如何将变量与 NSArray 中的 NSDictionary 中的对象进行比较?

如何将结构字段与C中的变量进行比较? [复制]

将每个资源的名称与 sqlite 数据库变量的内容进行比较

我可以将变量类型与 Golang 中的 .(type) 进行比较吗?

如何将 Javascript 变量与 Jinja2 变量进行比较