从数组中删除行

我在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
点赞
用户1190388
用户1190388

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

所以,代码实际应该是:

for i = 1, #lineArr do
    print( lineArr[i] )
    table.remove( lineArr, i )
end
2015-02-22 05:58:27
用户3762712
用户3762712
或者,如果您知道要删除哪个值,还可以尝试一种简单的方法:

for k,v in pairs(tableName)do 如果v == YOUR-VALUE then tableName [k] = nil 返回 结束 end

```

只需简单更改 "YOUR-VALUE" 并添加值(如果您知道它)。

2015-02-22 13:32:33
用户2726734
用户2726734

在你的clear函数中,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
2015-02-22 13:58:55