检查数组是否包含特定值

时间:2015-11-03 23:02:10

标签: lua lua-table

我有这个数组,有一些值(int),我想检查用户给出的值是否等于该字符串中的值。如果是,则输出“获取您的字符串”等消息。

列表示例:

local op = {
{19},
{18},
{17}
}

if 13 == (the values from that array) then
  message
else
  other message

如何做到这一点?

3 个答案:

答案 0 :(得分:23)

Lua没有像其他语言一样严格的数组 - 它只有哈希表。 Lua中的表被认为是 array-like ,当它们的索引是数字且密集的时候,没有间隙。下表中的索引为1, 2, 3, 4

local t = {'a', 'b', 'c', 'd'}

当你有一个类似数组的表时,可以通过表中的循环来检查它是否包含某个值。您可以使用for..in循环和ipairs函数来创建通用函数。

local function has_value (tab, val)
    for index, value in ipairs(tab) do
        if value == val then
            return true
        end
    end

    return false
end

我们可以在if条件中使用上述内容来获取结果。

if has_value(arr, 'b') then
    print 'Yep'
else
    print 'Nope'
end

重申上面的评论,您当前的示例代码不是类似数组的数组表。相反,它是一个类似于数组的表,包含类似于数组的表,它们的每个第一个索引都有数字。您需要修改上面的函数才能使用您显示的代码,从而降低其通用性。

local function has_value (tab, val)
    for index, value in ipairs(tab) do
        -- We grab the first index of our sub-table instead
        if value[1] == val then
            return true
        end
    end

    return false
end

Lua不是一个非常大或复杂的语言,它的语法非常明确。如果上述概念对你来说完全陌生,那么你需要花一些时间阅读真实的文献,而不仅仅是复制例子。我建议你阅读Programming in Lua,以确保你理解其中的基础知识。这是针对Lua 5.1的第一版。

答案 1 :(得分:6)

您还可以通过将值移动到索引并为其指定真值来检查数组中的值是否更有效。

然后当你检查你的表时,你只需检查该索引上是否存在一个值,这样可以节省一些时间,因为在最坏的情况下你不需要遍历整个表...

以下是我想到的例子:

local op = {
[19]=true,
[18]=true,
[17]=true
}


if op[19] == true then
  print("message")
else
  print("other message")
end

答案 2 :(得分:4)

您的问题的表op实际上是数组的数组(表)。

检查表中是否存在值:

local function contains(table, val)
   for i=1,#table do
      if table[i] == val then 
         return true
      end
   end
   return false
end

local table = {1, 2, 3}
if contains(table, 3) then
   print("Value found")
end