kagamihogeの日記

kagamihogeの日記です。

Object で Java でいうところの Map#keySet や Map#entrySet をしたい

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