AS3.0旅情5 ~手軽に引ける辞書~
僕はお昼時によく本屋に行きます。
かれこれ一年位続いていますが、心癒された事、得た知識は数知れずです。
今回は、そんな本屋に雰囲気が似ている「Dictionaryクラスの有用性」についてです。
Dictionaryクラスは、Objectをキーとして内容を保持可能な大変便利なクラスです。
例えば、Flash8以前で同様の処理をしようとするとObjectやArrayを利用したindex検索を用いました。
しかし、各々、利点と欠点があります。
- Object:
- 内容の適合チェックの際、キーによる直接アクセスが可能
同名のキーでは登録不可(上書きされてしまう) - Array:
- キーによる重複は起きにくい
内容の適合チェックの際、要素全てを走査する必要性あり
Dictionaryクラスの場合、これらがカバー可能です。
Objectを継承しているだけあります。
- Dictionary:
- 同名のオブジェクトも内部的なオブジェクトの識別子で登録されるため、異なるキーとして処理
キーによる直接アクセスが可能
また、Dictionaryクラスの登録内容は一括操作可能です。
Dictionaryクラスのリファレンスを一見しただけですと、そういった記述はありませんが、まさに灯台下暗し、Objectを継承しているのでイテレートが可能です。
以下に例を記します。
/** * Dictionaryクラスのテスト */ package { import flash.display.*; import flash.utils.*; public class Test { private var _d:Dictionary; public function Test() { _d = new Dictionary(true); var mc:MovieClip = new MovieClip(); mc.name = "tom"; _d[mc] = "MovieClip"; _d["tom"] = "String"; _d[106] = "int"; traceDictionary(); } /** * Dictionary登録内容のtrace */ function traceDictionary():void { for (var prop:* in _d) { var obj:* = _d[prop]; trace("Regist By "+prop+" : "+obj); } //Regist By [object MovieClip] : MovieClip //Regist By 106 : int //Regist By tom : String } } }
登録順と出力順に相違が生じるのは面白いところです。