比较一个 Lua 表中的变量与所有变量?

我是一个新的 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
    --执行操作
  elseif PLATE!= Vehicles [i] .plate then
    --执行2个动作
  end
end

因为 AAA 111 具有索引 3,所以它首先检查索引 1 和索引 2,并运行第二个动作。然而,我不希望发生这种情况。我希望首先检查表中的所有值,如果没有一个是 AAA 111,则运行第二个操作。我能做到吗?非常感谢!

点赞
用户12514997
用户12514997

你可以使用 Lua 的 Table-as-Set 实现这个功能。

plates = {}

function addToSet(set, key) --查看链接得到更多类似函数
    set[key] = true
end

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

function checkPlate(PLATE)
  if setContains(plates, PLATE) then
    print("其中一个车牌号是", PLATE)
  else
    print("没有车牌号", PLATE)
  end
end

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

local PLATE = "AAA 123"
checkPlate(PLATE)

PLATE = "AAA 456"
checkPlate(PLATE)

输出:

其中一个车牌号是    AAA 123
没有车牌号   AAA 456

这比循环更高效,如果你想改变 plates 表以包括有关车牌的更多信息,使用 plates 作为字典键,即:

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

对addToSet函数做一些小修改,它仍将工作。

2020-09-15 17:42:42