Object をマップとして使用しているときにキーないし値の一覧を取りたい、といったときにどうやるか。Java の Map#keySet や Map#entrySet とはちょっと違うのだけど、反復処理をしたいという意味合いでは同じなのでこういうタイトルにしました。まぁ備忘録です。
で、サンプルのソース。
var map:Object={}; map["a"] = "AAA"; map["b"] = "BBB"; map["c"] = "CCC"; map["d"] = "DDD"; for (var j:String in map) { trace(j); } for each (var i:String in map) { trace(i); } for (var k:String in map) { trace("key:" + k + " value:" + map[k]); }
実行結果は、手元の環境では下記のように表示された。どんな順序になるかはたぶん環境依存。
b d a c BBB DDD AAA CCC key:b value:BBB key:d value:DDD key:a value:AAA key:c value:CCC
for..in はキー(プロパティ名と言うべきか)、for each..in は値に対して反復処理を行う。うーん……ちょっと、まぎらわしくないですか、これ……
参考 URL
ステートメント、キーワード、ディレクティブ - ActionScript 3.0 コンポーネントリファレンスガイド - for..in
ステートメント、キーワード、ディレクティブ - ActionScript 3.0 コンポーネントリファレンスガイド - for each..in