Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Checkbox 删除复选框表中的第一个值_Checkbox_Lua_Coronasdk_Lua Table - Fatal编程技术网

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

Checkbox 删除复选框表中的第一个值,checkbox,lua,coronasdk,lua-table,Checkbox,Lua,Coronasdk,Lua Table,我正在用Lua制作一个有大量复选框的程序。每个复选框的ID按其显示顺序从1到100。选中复选框时,表格将保存复选框ID并对其进行排序;未选中复选框时,表格将搜索该复选框ID,如果找到该复选框ID,则将其删除,然后再次对表格进行排序 但是,我遇到了第一个值不能自动删除的问题。如果我先选中一个较早的ID值,然后取消选中它,它就会被删除,但如果我先尝试取消选中它,它就不会被删除 代码如下: switchCounter = 0 switchID = {} --if checkbox-is-checke

我正在用Lua制作一个有大量复选框的程序。每个复选框的ID按其显示顺序从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。

您将表索引从0开始,这让Lua感到困惑。在Lua中,表是1索引的,这与大多数编程语言中的表不同。不幸的是,即使您使用了错误的索引范围,这些代码中的大多数实际上仍然可以工作。但是,当您在第一个元素上调用table.remove时,由于您的第一个元素的索引为0,因此您将最终调用table.removeswitchID,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在索引方面的立场的更多信息,请参见下面的nobody's精彩评论。

谢谢!疯狂的是,我一直在使用Lua,我从来都不知道表索引从1开始,但从来没有遇到过这样的问题。谢谢你!嘿,我已经使用Lua很长一段时间了,当我打开解释器并开始玩表来找出这里出了什么问题时,我完全感到困惑……我不知道0-indexing仍然可以工作这么多,即使它不应该如此!\u。为我们俩学习经验!1/2 Lua表不关心您使用的键。如果您使用表作为数组,可以从0,1,23,-42开始,按照1,-0.25,5,…,的步骤进行,您可以使用a、b、…aa、ab…或任何您喜欢的-这不重要。桌子和卢阿都不在乎。所以它不应该起作用!但是标准的桌面库和iPair是完全不同的动物:它们非常固执己见。对于它们,表/数组/序列必须从1开始,增量为1,并且在被认为是数组的部分中不能有任何间隙为零。这就是为什么在使用这些函数之前一切正常。2/2您可以编写自己的阵列库/替换ipairs/…如果您愿意并使其以不同的方式工作,Lua对此完全没有问题,我在有意义的地方做了一两次。但是,一般来说,这是没有意义的,因为字符串库、调试库等其他所有东西也是基于1的。[Lua不在乎位不是100%正确-基于1的阵列有一个小的优化,因此占用的内存/时间更少。但如果你遵守,这只会更快,如果你偏离,则不会完全破坏,如果你不需要它,则可以忽略它/在其他地方保存更多。]@Josh Parnell Nope:或者也可以看到