我有这个数组,有一些值(int),我想检查用户给出的值是否等于该字符串中的值。如果是,输出一条消息,如“有你的字符串”。列表中的检查数组是否包含特定值
例子:
local op = {
{19},
{18},
{17}
}
if 13 == (the values from that array) then
message
else
other message
如何才能做到这一点?
我有这个数组,有一些值(int),我想检查用户给出的值是否等于该字符串中的值。如果是,输出一条消息,如“有你的字符串”。列表中的检查数组是否包含特定值
例子:
local op = {
{19},
{18},
{17}
}
if 13 == (the values from that array) then
message
else
other message
如何才能做到这一点?
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
-- 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。
你问题的表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
只有在表格是* sequence *的情况下才起作用,在这种情况下它是有效的。如果可能不是,请使用类似'for k,v对(表)做的事情,如果k == val然后返回true结束返回false' –
正确。我认为你的评论需要进一步解释,特别是对于那些Lua新手。在Lua中,表可以是散列表(存储为稀疏数组)或数组(序列)。稀疏数组包含nils。数组的长度计算为找到第一个零之前的元素数。这意味着不可能用一个索引或ipairs来迭代包含nils的数组。在这种情况下,有必要使用配对。也就是说,如果你知道你的表是一个数组,最好使用ipairs,因为pair对要慢得多。 –
您也可以通过将您的值移至索引并为其指定真值来检查数组中存在的值是否更有效。
然后,当你检查你的表,你只是检查,如果该索引,这将节省您的时间,因为你不需要去通过整个表在最坏的情况下存在的值...
这是我脑子里想的例子:
local op = {
[19]=true,
[18]=true,
[17]=true
}
if op[19] == true then
print("message")
else
print("other message")
end
不需要'op [19] == true'。那可以是'op [19]' – timbo
你打算让'op'要与数字阵列,如表_containing_阵列样表在每一个他们的第一个指标的,或者是你寻找'运= {19,18,17}'? – Oka