イテレータの内部について知らずに、本質的に型指定されていない魔法を介してごまかすことなく、イテレータを提供する任意のタイプのイテラブルである可能性があると想定せずに、一般的なイテレータを逆に繰り返し処理したいとしましょう。実行時にイテレータの逆を最適化したり、マクロを介して最適化したりすることはできますか?
フォワード
var a = [1, 2, 3, 4].iterator();
// Actual iteration bellow
for(i in a) {
trace(i);
}
後方へ
var a = [1, 2, 3, 4].iterator();
// Actual reverse iteration bellow
var s = [];
for(i in a) {
s.push(i);
}
s.reverse();
for(i in s) {
trace(i);
}
これを行うには、もっと簡単な方法、または少なくとも高速な方法が必要だと思います。Iterator クラスにはサイズがないため、サイズを知ることができません。したがって、一時配列へのプッシュを反転することはできません。ただし、一時配列のサイズがわかっているため、逆を削除できます。
var a = [1,2,3,4].iterator();
// Actual reverse iteration bellow
var s = [];
for(i in a) {
s.push(i);
}
var total = s.length;
var totalMinusOne = total - 1;
for(i in 0...total) {
trace(s[totalMinusOne - i]);
}
配列の可能性を取り除くために使用できる最適化は他にありますか?