kuri.がやろうとしていることをやってみた。
まぁ結論として、adobeがhashクラスを作ってくれれば良いんだよな。うん。
結合配列と配列の両方の特性を使いたいなー。
actionscript3.0で結合配列に追加した順番でいろいろ操作したい
かなりの妥協だけど、結合配列のobjectを読み込んでkeyをarrayに突っ込むクラスを作れば良い、と思うんだ。
調べてないから保障はできないけど、とりあえず結合配列に突っ込んだ値は追加した順になってるっぽい。
かなり適当だけど、push, pop, unshift, shiftを実装したソース貼り付けてみる。
package CustomHash { public dynamic class CustomHash extends Object { private var array:Array = new Array(); public function CustomHash(obj:Object = null) { if (obj != null) { for (var key:String in obj) { this[key] = obj[key]; array.push(key); } } } public function push(obj:Object):void { if (obj != null) { for (var key:String in obj) { this[key] = obj[key]; array.push(key); } } } public function pop():void { var key:String = array.pop(); delete this[key]; } public function unshift(obj:Object):void { if (obj != null) { for (var key:String in obj) { this[key] = obj[key]; array.unshift(key); } } } public function shift():String { var key:String = array.shift(); var value:String; value = this[key]; delete this[key]; return value; } public function length():int { var i:int = 0; for (var key:String in this) { i++; } return i; } public function debug():void { var i:int = 0; for (i=0; i < array.length; i++) { trace(array[i] + " => " + this[array[i]]); } } } }
import CustomHash; private function init():void{ var obj:Object = new Object(); obj["key1"] = "value1"; obj["key2"] = "value2"; obj["key3"] = "value3"; trace("-----constructer"); var hash:CustomHash = new CustomHash(obj); hash.debug(); trace("-----push"); obj = new Object(); obj["key4"] = "value4"; obj["key5"] = "value5"; hash.push(obj); hash.debug(); trace("-----pop"); hash.pop(); hash.debug(); trace("-----unshift"); obj = new Object(); obj["key6"] = "value6"; obj["key7"] = "value7"; hash.unshift(obj); hash.debug(); trace("-----shift"); trace(hash.shift()); hash.debug(); }
使用結果。
-----constructer key1 => value1 key2 => value2 key3 => value3 -----push key1 => value1 key2 => value2 key3 => value3 key4 => value4 key5 => value5 -----pop key1 => value1 key2 => value2 key3 => value3 key4 => value4 -----unshift key7 => value7 key6 => value6 key1 => value1 key2 => value2 key3 => value3 key4 => value4 -----shift value7 key6 => value6 key1 => value1 key2 => value2 key3 => value3 key4 => value4
pushとかunshift時には追加するobjectを一度初期化してから結合配列にしたものを突っ込むようにしないといけないのが面倒くさいところか・・・。
objectとしての塊で追加できるところは便利かもしれない。。。
と言うかobject作るワンクッションが面倒くさい、くさすぎる!
今はdebugがarrayの昇順で表示してるけど降順も可、と言う事になるわな。
kuri.ならもっと良いもの作れる・・・!きっと!