Lua doesn't have strict arrays like other languages - it only has hash tables. Tables in Lua are considered array-like when their indices are numerical and densely packed, leaving no gaps. The indices in the following table would be 1, 2, 3, 4
.
local t = {'a', 'b', 'c', 'd'}
When you have an array-like table, you can check if it contains a certain value by looping through the table. You can use a for..in
loop, and the ipairs
function to create a generic function.
local function has_value (tab, val)
for index, value in ipairs(tab) do
if value == val then
return true
end
end
return false
end
We can use the above in an if
conditional to get our result.
if has_value(arr, 'b') then
print 'Yep'
else
print 'Nope'
end
To reiterate my comment above, your current example code is not an array-like table of numbers. Instead it is an array-like table containing array-like tables, who have numbers in each of their first indices. You'd need to modify the function above to work with your shown code, making it less generic.
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 is not a very large or complex language, and its syntax is very clearcut. If the above concepts are totally alien to you, you'll need to spend some time reading real literature, not just copying examples. I would advise reading Programming in Lua to make sure you understand the very basics. This is the first edition, aimed at Lua 5.1.
op
to be an array-like table containing array-like tables with numbers at each of their first indices, or are you looking forop = {19, 18, 17}
? – Highpriced