我需要生成一个随机数,然后检查以查看该数字在哪些表(数组)中作为值列出。检查完成后,我需要输出显示数字的表。
例如,将生成一个1到21之间的随机数,然后在其他数字表中进行搜索。
evens = {2,4,6,8,10,12,14,16,18,20}
odds = {1,3,5,7,9,11,13,15,17,19,21}
low = {1,2,3,4,5,6,7}
med = {8,9,10,11,12,13,14}
high = {15,16,17,18,19,20,21}
如果随机数为17,则需要输出“ odds”和“ high”。
答案 0 :(得分:0)
不需要检查奇数表,并且进入范围更容易检查限制:
local low = {1,2,3,4,5,6,7}
local med = {8,9,10,11,12,13,14}
local high = {15,16,17,18,19,20,21}
local n = 33
local function CheckNum(n)
local tab_type = 'unknown'
if n >= 1 and n <=7 then tab_type = "low"
elseif n >= 8 and n <=14 then tab_type = "med"
elseif n >= 15 and n <=21 then tab_type = "high"
end
local odd = (n%2==0) and "even" or "odd"
return odd, tab_type
end
local odd, tab_type = CheckNum(n)
print ( odd, " ", tab_type )
答案 1 :(得分:0)
我可以提供的最通用的解决方案是构建inverted index之类的东西。您只需要在表格中为每个可能的术语(在您的情况下为数字)创建一条记录。此类表中的值表示可以在其中找到术语的数组。 代码如下所示:
local evens = { 2, 4, 6, 8, name = 'evens'}
local odds = {1, 3, 5, 7, name = 'odds'}
local low = { 1, 2, 3, 4, name = 'low'}
local high = {15, 16, 17, 18, 19, name = 'high'}
local inv_index = {}
function add_to_index(index, numbers)
for i, number in ipairs(numbers) do
local indexed = index[number]
if not indexed then
index[number] = { numbers }
else
table.insert(indexed, numbers)
end
end
end
add_to_index(inv_index, evens)
add_to_index(inv_index, odds)
add_to_index(inv_index, low)
add_to_index(inv_index, high)
-- which arrays contains the number "4"?
for k, indexed in pairs(inv_index[4]) do
print(indexed.name) -- prints "evens" and "low"
end
此解决方案的缺点是内存消耗,尤其是在可能的数字数量很大的情况下。另一种方法是对每个数组排序并对其执行binary search。 lua有一个implementation。
如果您可以修改数组,则可以将数字存储在某种类型的集合中:
local evens = { [2] = true, [4] = true, [6] = true, [8] = true }
local low = { [1] = true, [2] = true, [3] = true, [4] = true }
local odds = { [1] = true, [3] = true , [5] = true, [7] = true }
local x = 4
print(evens[x] ~= nil) -- true
print(low[x] ~= nil) -- true
print(odds[x] ~= nil) -- false
答案 2 :(得分:0)
我找到了一个函数来检查列表中的值:
function contains(list, x)
for _, v in pairs(list) do
if v == x then return true end
end
return false
end
这是一个如何使用它的示例:
alist={'abc',123}
if contains(alist,'abc')
print('abc is in the list alist')
end