@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;
		}
	}
}