如何将一堆值与自己进行比较

时间:2014-05-20 23:54:09

标签: lua lua-table

我有一个索引列表,我需要我的用户输入,我需要代码检查是否有任何重复,所以它会给出一个错误(它们不能重复)。

如果我只有两个索引,它将很简单:

if indexa == indexb then error() end

但它的名单很长。

2 个答案:

答案 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