文章だけの判断であれだけど
最初のForeach中に次のForeachをやる場合は
最初のForeachのオブジェクトの選択は死んでるから、
最初のForeachのオブジェクトの固定値なり変数なりを
記録してないと出来なくない?
高速ループはループのネストが出来て
ループインデックスをもってこれるから出来てるんじゃないの?