如何检查 Lua 表中是否不存在某个值?

我对 lua 还比较新,因此请原谅我如果这个问题太基础了。我想知道是否有一种好的方法来检查在 Lua 表中某个值是否不存在。类似于:

if 5 ~= t[1] or 5 ~= t[2] or 5 ~= t[3] ... then end

但更不蠢的方法。

这种方法:

for i,v in ipairs(t) do
   if  5 ~= v then
   end
end

并不起作用,因为我想检查是否没有出现在表中,而不是是否等于任何给定值。

到目前为止,我能想到的可能是唯一比较可行的解决方案是类似这样的东西:

check = 0
for i,v in ipairs(t) do
   if  5 == v then
   check = 1
   end
end

if check == 0 then end

但这看起来还是有些繁琐...

非常感谢!

点赞
用户2858170
用户2858170

如果您想知道一个值是否在表中,您必须将每个表值与您的值进行比较,直到找到第一个匹配项。

for k,v in pairs(myTable) do
  if v == searchValue then
    print("找到了一个!")
    break
  end
end

请记住,“ipairs”仅适用于索引为1-n的连续索引表。如果您想检查任何表元素,请使用“pairs”。

2019-05-05 17:30:10
用户7762387
用户7762387

如果您需要检查一个项是否存在于数组中,最好为该数组保留一个哈希映射表。这显然是低效的,因为每次检查都需要遍历整个(或部分)数组。我建议您在创建映射表之后才进行检查。例如:

local function array_map(array)
  local map = {}
  for _, item in ipairs(array) do
    map[item] = true
  end
  return map
end

local array = {1,2,3,4,5,6,7}
local arr_map = array_map(array)

if arr_map[1] then
  print("该数组拥有项 1")
end

if not arr_map[10] then
  print("项 10 不是该数组的一部分")
end

这就是如何在映射构建一次性的 Ï‘(1) + n 的常数时间内进行测试。

2019-05-06 21:31:47