删除复选框中的第一个值 Table

Removing First Value in Checkbox Table

我正在 Lua 中制作一个包含大量复选框的程序。每个复选框按照它们出现的顺序从 1 到 100 进行 ID 编码。选中复选框时,table 保存复选框 ID 并对其进行排序,未选中时,搜索 table 以查找该复选框 ID,如果找到则将其删除,然后对其进行排序table 再次。

但是,我遇到了第一个值未自行删除的问题。如果我检查较早的 ID 值然后取消选中它,它将被删除,但如果我尝试先取消选中它则不会。

代码如下:

switchCounter = 0
switchID = {}

--if checkbox-is-checked then
    switchID[switchCounter] = checkbox.id
    switchCounter = switchCounter + 1
    table.sort(switchID)

--elseif checkbox-is-unchecked then
  for p = 0, #switchID do
    if switchID[p] == checkbox.id then
      table.remove(switchID, p)
    end
  end
  switchCounter = #switchID+1
  table.sort(switchID)

table 在这一点之后(还)没有被改变或触及。只要它不是我要删除的第一个值,它就可以完美运行,但没有任何反应。

如果与回答相关,此代码正在使用 Corona SDK。

您的 table 索引从 0 开始,您混淆了 Lua。在 Lua 中,table 是 1 索引的,这与您使用的不同从大多数编程语言。不幸的是,即使您使用了错误的索引范围,此代码的 大部分 实际上仍然有效 。但是,当您在 first 元素上调用 table.remove 时,由于您的第一个元素的索引为 0,您将最终调用 table.remove(switchID, 0),此时 Lua 扬起眉毛看着你,然后继续做……什么也没做。 0 不是 Lua 的有效 table 索引,因此它不会删除您的第一个元素。

将您的索引更改为从 1 开始,一切都会好起来的:

switchCounter = 1
switchID = {}

--if checkbox-is-checked then
    switchID[switchCounter] = checkbox.id
    switchCounter = switchCounter + 1
    table.sort(switchID)

--elseif checkbox-is-unchecked then
  for p = 1, #switchID do
    if switchID[p] == checkbox.id then
      table.remove(switchID, p)
    end
  end
  switchCounter = #switchID+1
  table.sort(switchID)

编辑: 请参阅下面没有人的精彩评论,以获取有关 Lua 对索引的立场的更好信息。