Безопасное удаление элементов из таблицы массива во время итерации

This question is similar to Как безопасно перебрать таблицу lua во время удаления ключей но заметно отличается.

Summary

Дан массив Lua (таблица с ключами, которые являются последовательными целыми числами, начиная с1), как лучше перебрать этот массивand delete some of the entries as they are seen?

Real World Example

У меня есть массив записей с метками времени в таблице массива Lua. Записи всегда добавляются в конец массива (используяtable.insert).

local timestampedEvents = {}
function addEvent( data )
  table.insert( timestampedEvents, {getCurrentTime(),data} )
end

Мне нужно время от времени проходить через эту таблицу (по порядку) и обрабатывать и удалять определенные записи:

function processEventsBefore( timestamp )
  for i,stamp in ipairs( timestampedEvents ) do
    if stamp[1] <= timestamp then
      processEventData( stamp[2] )
      table.remove( timestampedEvents, i )
    end
  end
end

К сожалению, приведенный выше код нарушает итерацию, пропуская некоторые записи. Есть ли лучший (менее печатающий, но все же безопасный) способ сделать это, чем вручную обходить индексы:

function processEventsBefore( timestamp )
  local i = 1
  while i <= #timestampedEvents do -- warning: do not cache the table length
    local stamp = timestampedEvents[i]
    if stamp[1] <= timestamp then
      processEventData( stamp[2] )
      table.remove( timestampedEvents, i )
    else
      i = i + 1
    end
  end
end

Ответы на вопрос(9)

Ваш ответ на вопрос