检查数组是否包含特定值。

我有一个数组,其中包含一些值(int),我想检查用户提供的值是否等于该字符串中的某个值。如果是,则输出类似于“获得了您的字符串”的消息。

列表示例:

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

if 13 ==(该数组的值)then
  消息
else
  其他消息

如何做到这一点?

点赞
用户134758
用户134758

你问题中的表 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("值找到了")
end
2015-11-03 23:35:15
用户2505965
用户2505965

Lua不像其他语言一样有严格的数组–它只有哈希表。当Lua的表索引为数字并密集地排列时,该表被视为“类数组”表,没有任何空隙。以下表格的索引将为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
        -- 我们取出子表的第一个索引
        if value[1] == val then
            return true
        end
    end

    return false
end

Lua不是很大或复杂的语言,其语法非常清晰。如果上述概念对您来说完全陌生,那么您需要花费一些时间阅读真正的文献,而不仅仅是复制示例。我建议阅读Programming in Lua以确保您了解非常基本的知识。这是针对Lua 5.1的第一版。

2015-11-03 23:37:12
用户5342251
用户5342251

你还可以通过将值移动到索引上并将它们赋值为 true,使数组中值的存在性检查更加高效。

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

以下是我想到的一个例子:

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

if op[19] then
  print("message")
else
  print("other message")
end
2015-11-09 10:04:05