如何检查一个值是否不在Lua表中的任何地方?

时间:2019-05-05 17:23:10

标签: 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

但是看起来仍然很麻烦...

非常感谢!

2 个答案:

答案 0 :(得分:2)

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

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

请记住,ipairs仅适用于具有连续索引1-n的表。 如果要检查任何表元素,请使用pairs

答案 1 :(得分:1)

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

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的恒定时间内一次进行地图构建的测试方法。