Size: a a a

2016 June 07

S

Snusmumriken in pro.lua
Фактически, это аналог данного
источник

S

Snusmumriken in pro.lua
источник

S

Snusmumriken in pro.lua
Можно проще
источник

М

Мерль🛠 in pro.lua
Я бы так делать не стал
источник

S

Snusmumriken in pro.lua
Почему?
Что бы ты стал делать?
источник

М

Мерль🛠 in pro.lua
Потому что сложность table.remove( . )  - O(n)
То есть чтобы удалить первый элемент в таблице из тысячи записей, эта функция переберёт 999 элементов

Я бы сделал как-то так

local l = newlist {1, 2, 3, 4, 5, 6} --какая-нибудь релизация контейнера двунаправленного списка из миллиона существующих. Или написал бы сам урезаную версию в четыре строки

local curr

while  curr do

    if not isvalid(curr.val) then

        curr.remove()

    end

    curr = curr.next()

end

Вот эта штука curr.remove() (удаление из списка) имеет сложность порядка O(1), то есть не зависит от длины списка
источник

S

Snusmumriken in pro.lua
Ок, тогда не
while i < #t
а
while i <= #t.
Переберём все элементы.
У тебя сложность чуть выше, потому что лишнее условие.
На деле, можно сделать еще проще, как для восприятия, так и по длине строк.
Просто чуть-чуть подумать.
источник

М

Мерль🛠 in pro.lua
Snusmumriken
Ок, тогда не
while i < #t
а
while i <= #t.
Переберём все элементы.
У тебя сложность чуть выше, потому что лишнее условие.
На деле, можно сделать еще проще, как для восприятия, так и по длине строк.
Просто чуть-чуть подумать.
Лол
Чувак
Сложность алгоритма определяется не сколько сложностью строк
Проверок у меня даже меньше, чем у тебя
Но дело в том, что проверка - как раз быстрая операция
А вот удаление из массива - очень тяжёлая
источник

S

Snusmumriken in pro.lua
Ответ:
for i = #t, 1, -1 do
 if (valid) then table.remove(t, i) end
end
источник

М

Мерль🛠 in pro.lua
Проще для понимания =/= правильно
источник

S

Snusmumriken in pro.lua
Ответ правильный.
Проверь.
Работает лучше всего.
источник

М

Мерль🛠 in pro.lua
Это работает
Но работает фигово
источник

М

Мерль🛠 in pro.lua
Потому что удалять из массива воообще неправильно
источник

М

Мерль🛠 in pro.lua
За это на собеседованиях руки отрывают
И правильно делают
источник

М

Мерль🛠 in pro.lua
Это не демагогия, а факт
Ты ведь знаешь как работает table.remove ?
источник

М

Мерль🛠 in pro.lua
Она сдвигает ** каждый ** элемент выше удаляемого на одну позицию вниз
источник

М

Мерль🛠 in pro.lua
Неужели так сложно rtfm?
источник

S

Snusmumriken in pro.lua
Мерль🛠
Неужели так сложно rtfm?
А те что ниже не трогает.
источник

S

Snusmumriken in pro.lua
Да, физически не сдвигает, если что.
Меняет порядок слабых связей в лишней табличке ответственной за порядок
источник

Ч

Чувак in pro.lua
А как, кстати, в луа сразу задать размер массива?
источник