[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: filter an array in place
- From: Emmanuel Oga <emmanueloga@...>
- Date: Fri, 14 Jan 2011 01:12:40 -0300
Hello, I'm looking for the best proper way of doing this:
local tab = {"a", "a", "c", "a", "d", "a" }
for index, val in ipairs(tab) do
if val == "a" then -- could be any other complex condition
table.remove(tab, index)
end
end
-- WRONG: tab = { "a", "c", "d" }, should be { "c", "d" }
So removing elements from a container _while you are iterating it_ is
wrong in most languages. I'm looking for the nicest and proper way of
doing it.
Two methods I came up with:
1) popping from the array and pushing to a new one if the condition is met.
2) Iterating first, storing indexes to remove, then removing one by
one (compensating index offset as a result of each removed elements)
http://pastie.org/1458808
Is there any other more elegant way?
--------------------------------------------------------------
EmmanuelOga.com - Software Developer