如何检查一个值在Lua表中不存在?

3

我是一个刚接触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

但那看起来仍然有些繁琐...

非常感谢!

2个回答

2

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

for k,v in pairs(myTable) do
  if v == searchValue then
    print("Found one!")
    break
  end
end

请注意,ipairs 仅适用于具有连续索引 1-n 的表格。如果您想检查任何表元素,请使用 pairs

2

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

Original Answer翻译成"最初的回答"

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("The array has item 1")
end

if not arr_map[10] then
  print("Item 10 is not part of the array")
end

这是如何在构建地图时,让你的测试时间保持恒定的ϑ(1)+n。最初的回答:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接