从数组中删除行

时间:2015-02-22 05:31:26

标签: arrays lua corona lua-table

我在Lua(Corona SDK)中有一个问题:

我有一张可以画画和清晰的白板,但我的清晰度有问题。这是我的绘图功能:

if(phase == 'moved') then
    local xStart, yStart = self.xStartTemp or e.xStart, self.yStartTemp or e.yStart

    --add new line
    local xEnd, yEnd = e.x, e.y
    local line = display.newLine(xStart, yStart, xEnd, yEnd)

    -- self:drawCircleStream(e.x, e.y)

    self.xStartTemp, self.yStartTemp = xEnd, yEnd
    line.strokeWidth = 1
    line:setStrokeColor(0,0,0)
    self.group:insert(line)
    self.line = line
elseif(phase == 'ended') then
    --store line in a table
    self.xStartTemp, self.yStartTemp = nil, nil
    local lineArr = self.lineArr
    table.insert(lineArr, self.line)
end
return true

这是明确的(不起作用):

local lineArr = self.lineArr
for i=1,#lineArr do
    print(lineArr[i])
    table.remove(lineArr[i])
    -- lineArr[i]:removeSelf()
end

3 个答案:

答案 0 :(得分:2)

函数table.remove接受两个参数:表本身和要删除值的索引。

在那里,代码应该是:

for i = 1, #lineArr do
    print( lineArr[i] )
    table.remove( lineArr, i )
end

答案 1 :(得分:0)

如果您知道要删除的值,也可以尝试一种简单的方法:

for k, v in pairs (tableName) do
    if v==YOUR-VALUE then
        tableName[k] = nil
        return
    end
end

只需更改“YOUR-VALUE”并添加值(如果您了解它)。

答案 2 :(得分:0)

在你的明确功能中。当你移除时,table.remove将你的表格元素向下移动以填补空白,当它与for循环中的迭代相结合时,它会给你带来意想不到的行为:

 t  =  { 2, 4, 6 }
 for i, _ in ipairs(t) do
    table.remove(t, i)
 end
 for _, v in ipairs(t) do
   print(v)
 end

最终结果是,t仍然具有值4。

如果要清空表格,只需指定一个新表格:

 self.lineArr = {}

要在不创建新表的情况下清除数组,请执行以下操作:

  for i=1,#array do array[i] = nil end