@niumさんの発言 http://twitter.com/nium/statuses/770714465
for (var i:int = 0; i < n; i++) { for (var j:int = 0; j < m; j++) { } } これはキライだなー
// @nium 追記、いつもこんな感じでやってます
var array = [["0-0", "0-1"], ["1-0", "1-1"], ["2-0", "2-1"]];
var l:int = array.length;
for ( var i:int = 0; i < l; i++ ) {
var ll:int = array[i].length;
for ( var ii:int = 0; ii < ll; ii++ ) {
trace( array[i][ii] );
}
}
をもとに、思いつきで書いたクラスです。使い方はクラス冒頭の例を参照してください。
package {
public class Iterator2D {
public static function example():void {
var i:Iterator2D = new Iterator2D(6, 8);
while (i.next()) {
trace(i.x + ", " + i.y);
}
}
public static function example_nium():void {
var array = [["0-0", "0-1"], ["1-0", "1-1"], ["2-0", "2-1"]];
var i:Iterator2D = new Iterator2D(array.length, array[0].length);
while (i.next()) {
trace(array[i.x][i.y]);
}
}
public var x:int = 0;
public var y:int = 0;
public var w:int;
public var h:int;
public function Iterator2D(w:int, h:int, xfirst:Boolean = true) {
this.w = w;
this.h = h;
if (xfirst) {
next = nextx;
} else {
next = nexty;
}
}
public var next:Function;
public function nextx():Boolean {
if (++x >= w) {
x = 0;
if (++y >= h) {
return false;
}
}
return true;
}
public function nexty():Boolean {
if (++y >= h) {
y = 0;
if (++x >= w) {
return false;
}
}
return true;
}
}
}

