移除复选框表格中的首个值

我正在用 Lua 编写一个大量使用复选框的程序。每个复选框都有一个 ID,从 1 到 100 按照它们的出现顺序进行排序。当选中一个复选框时,表格会保存复选框的 ID 并进行排序,而当取消选中时,表格会搜寻该复选框 ID 并在找到后移除它,然后再次对表格进行排序。

然而,我遇到了一个问题,即第一个值无法移除。如果我选中一个较早的 ID 并将其取消选中,则它会被移除,但如果我首先尝试将其取消选中,则不会发生任何事情。

以下是代码:

switchCounter = 0
switchID = {}

--如果复选框被选中,则
    switchID[switchCounter] = checkbox.id
    switchCounter = switchCounter + 1
    table.sort(switchID)

--否则,如果复选框被取消选中,则
  for p = 0, #switchID do
    if switchID[p] == checkbox.id then
      table.remove(switchID, p)
    end
  end
  switchCounter = #switchID+1
  table.sort(switchID)

此后,表格不会被更改或操作(尚未)。只要它不是我想要移除的第一个值,它就可以完美地工作。

如果 Corona SDK 对回答有用,则此代码利用 Corona SDK。

点赞
用户2796594
用户2796594

你正在混淆 Lua,因为你从0开始索引你的表。在 Lua 中,表是从1开始索引的,不像您从大多数编程语言中习惯的那样。不幸的是,即使您使用了错误的索引范围,但大部分代码仍然有效。但是,当您对第一个元素调用 table.remove 时,由于您的第一个元素的索引为0,您最终将调用 table.remove(switchID, 0),此时 Lua 将抬起眉毛看着您并继续……绝对什么也不做。0不是 Lua 的一个有效表索引,所以它不会删除您的第一个元素。

将您的索引更改为从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 索引的更好信息,请参阅下面没有人的优秀评论。

2017-05-10 06:32:28