반복자의 내부에 대해 알지 못하고 유형이없는 마법을 통해 속임수를 쓰지 않고 일반 제스레이터를 역순으로 반복하고 싶다고 가정 해 봅시다. 반복자를 제공하는 모든 유형의 반복 가능; 우리는 반복자의 역순을 런타임이나 매크로를 통해 최적화 할 수 있습니까?반전에서 반복자를 반복하는 가장 빠른 방법은 무엇입니까
전달합니다
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]);
}
Is there any more optimisations that could be used to remove the possibility of the array?
반복자가 자체적으로 게으르므로 가능한 한 게으른 구현을 유지하는 것이 좋을 것입니다 (다음 방법을 호출하는 것은 여러분의 몫입니다) – simonrichardson