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

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

如果我只有两个索引,那么检查起来就很简单:

if indexa == indexb then error() end

但是我的列表相当长。

点赞
用户869951
用户869951

你可以将所有的索引放入表中,使用 table.sort 将它们排序,然后循环表项以测试任何连续项是否相同:

indices = {1,6,3,0,3,5} -- 将引发错误
indices = {1,6,3,0,4,5} -- 将不会引发错误
table.sort(indices)
for i=1, (#indices-1) do
    if indices[i] == indices[i+1] then
        error('不允许重复')
    end
end
2014-05-21 05:12:19
用户3574628
用户3574628

以下是检测重复的基本算法。

-- 这个表被称为集合。
local indexes = {}

while true do
  local index = getIndexFromUser()

  -- 检查输入是否结束。
  if not index then
    break
  end

  -- 检查是否有重复。
  if indexes[index] then
    error()
  end

  -- 将该索引作为键存储到 indexes 表中。
  indexes[index] = true
end

换句话说,表键值不能重复,因此您可以在表中存储任何非 nil 的值作为键。稍后(在循环的后续迭代中),您可以检查该键是否为 nil。

2014-05-21 18:40:59