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

时间:2017-05-10 06:03:32

标签: checkbox lua corona lua-table

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

但是,我遇到第一个不删除自身值的问题。如果我检查一个早期的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)

在此之后(尚未)更改或触摸表格。只要它不是我想要移除的第一个值,它就会完美地工作,没有任何反应。

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

1 个答案:

答案 0 :(得分:4)

通过将表索引设置为0,你会让Lua感到困惑。在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在索引编制方面立场的更多信息。