Currently I'm getting an iterator and throw the first i-1 elements away to get the i-th one. But I think there has to be a much more elegant solution, depending on how the data is managed internally. I already had a look into that but I'm not sure how to use it correctly.
Keep in mind that the lightmap is basically an array of arrays, and the iterator only revisits the lightmap structures when it changes from array to array, not every element. It stores how many elements left in the current array in the iterator.
The problem is that this kind of fast iteration requires state (current array, how many elements left in it etc), and a for loop has no state except the loopvar. Which is why the iterator works this way (and later, with FOR..IN support to simplify syntax)
Most clean loopvar solutions will have the same problem (and speed degradation) as the multiple iterator solution. I never saw an elegant solution. Moreover, indexes in a ordered collection are void anyway if a value is added.