我有一个索引列表,我需要我的用户输入,我需要代码检查是否有任何重复,所以它会给出一个错误(它们不能重复)。
如果我只有两个索引,它将很简单:
if indexa == indexb then error() end
但它的名单很长。
答案 0 :(得分:1)
这是检测重复的基本算法。
-- This table is what's known as a set.
local indexes = {}
while true do
local index = getIndexFromUser()
-- Check for end of input.
if not index then
break
end
-- Check for repeats.
if indexes[index] then
error()
end
-- Store index as a key in indexes.
indexes[index] = true
end
换句话说,表键不能重复,因此您只需将任何非零值存储在该键下的表中即可。稍后(在循环的未来迭代中),您可以检查该键是否为零。
答案 1 :(得分:0)
您可以将所有索引放在表中,使用table.sort
对它们进行排序,然后循环遍历表项以测试是否有任何连续项是相同的:
indices = {1,6,3,0,3,5} -- will raise error
indices = {1,6,3,0,4,5} -- will not raise error
table.sort(indices)
for i=1, (#indices-1) do
if indices[i] == indices[i+1] then
error('not allowed duplicates')
end
end