2015-02-22 1 views
0

У меня есть вопрос в 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 

ответ

2

Функция table.remove принимает два аргумента: Сама таблица и индекс, с которого значение должно быть удалено.

Там, код должен быть на самом деле:

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

или вы также можете попробовать простой способ, если вы в курсе, какое значение для удаления:

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

Просто измените «ПЕЖО -VALUE "и добавить значение (если вы знаете об этом).

+0

Код в вопросе предполагает, что таблица представляет собой [последовательность] (http://www.lua.org/manual/5.2/manual.html#3.4.6). Ваш код может сделать таблицу не последовательностью, тем самым создавая результат '#' undefined. –

0

В вашей четкой функции. table.remove сдвигает свои элементы таблицы вниз, чтобы заполнить пробел, когда вы снимаете, и когда это сочетается перебором в для цикла, это даст вам неожиданное поведение:

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