Удаление элементов таблицы

Страницы: 1
RSS
Удаление элементов таблицы
 
Господа, мне нужно удалить элементы таблицы. Дайте пожалуйста совет как это лучше сделать.
Вот код:
Код
s={}
for i=1,10 do
   table.insert(s,random_max()) --в будущем вместо рандомных чисел будут номера активных заявок.
end

toLog(log, s)

for i=1,#s do
        if i>0 then -- Сейчас я написал условие наугад. В будущем будет условие "удалить номер заявки из таблицы s если эта заявка снята или исполнена"
      table.remove(s,i)
        end
end

toLog(log, s)
фунция random_max() выдаёт случайные числа.
Данные лога:
таблица s ДО цикла с удалением:
1=941155680;2=1786453605;3=956870528;4=1765415360;5=1701888568;6=1306467983;7=1934583353;8=1639998291;9=498667592;10=1625028150;

таблица s ПОСЛЕ цикла с удалением:
1=1786453605;2=1765415360;3=1306467983;4=1639998291;5=1625028150;

Кхе-кхе.
Я ждал, что она полностью удалится, но этого не произошло. Более того, элементы сдвинулись.
Объясните пожалуйста почему так происходит и как мне удалять из таблицы нужные мне элементы.
 
Добавьте print(i,#s) в цикл удаления и увидите:
Скрытый текст
В мануале к table.remove написано, что он удаляет нужный, сдвигая остальные, или последний элемент.
В вашем случае надо делать или table.remove(s) или table.remove(s,1), чтобы удалять или с начала, или с конца, или следить, чтобы индекс был меньше размера таблицы.

ПС. Возможно, Вам будет профитнее использовать таблицу, индексированную не по-умолчанию i=1..N, а ключами - номерами заявок. Т.е.:
s = { }
s[order.order_num] = 1 or order or true
Тогда не будет головняков с удалением, за исключением того, что надо точно знать номер удаляемой заявки, чтобы её удалить с помощью s[order_num] = nil
Страницы: 1
Читают тему
Наверх