Elimine de forma segura los elementos de una tabla de matriz mientras itera

Esta pregunta es similar a¿Cómo puedo iterar con seguridad una tabla lua mientras se eliminan las claves? pero claramente diferente.

Resumen

Dada una matriz Lua (tabla con claves que son enteros secuenciales que comienzan en1), ¿cuál es la mejor manera de iterar a través de esta matrizy borre algunas de las entradas como se ven.?

Ejemplo del mundo real

Tengo una matriz de entradas con marca de tiempo en una tabla de matriz Lua. Las entradas siempre se agregan al final de la matriz (usandotable.insert).

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

Necesito ejecutar ocasionalmente esta tabla (en orden) y procesar y eliminar ciertas entradas:

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

Desafortunadamente, el código anterior rompe la iteración, saltándose algunas entradas. ¿Hay alguna forma mejor (menos de escribir, pero todavía segura) de hacerlo que caminando manualmente los índices:

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

Respuestas a la pregunta(9)

Su respuesta a la pregunta