ハッシュ(連想)配列について

as3での配列の挙動に、今さらはまったので、検証まとめ。

以下の検証用のコードを。
package
{
import com.adobe.utils.ArrayUtil;
import flash.display.Sprite;
import mx.utils.ObjectUtil;

public class testArray extends Sprite
{
public function testArray()
{
/**
* 普通の配列
*/
var a:Array = [ “hokkaido”, “aomori”, “iwate”, “akita” ];
var aCopy:Array = a.concat(); //配列をコピー
trace( “—–” );
trace( “a: ” + a.toString() );
trace( “aCopy: ” + aCopy.toString() );

aCopy.push( “miyagi” );
trace( “—–” );
trace( “a: ” + a.toString() );
trace( “aCopy: ” + aCopy.toString() );

var aCopyTwo:Array = ArrayUtil.copyArray( a ); //配列をコピー
trace( “—–” );
trace( “aCopyTwo: ” + aCopyTwo.toString() );

aCopyTwo.push( “yamagata” );
trace( “—–” );
trace( “a: ” + a.toString() );
trace( “aCopyTwo: ” + aCopyTwo.toString() );

var aCopyThree:Array = a;
aCopyThree.push( “fukushima” );
trace( “—–” );
trace( “a: ” + a.toString() );
trace( “aCopyThree: ” + aCopyThree.toString() );

/**
* Array でハッシュ配列
*/
var b:Array = [];
b[ “hokkaido” ] = “札幌”;
b[ “aomori” ] = “青森”;
b[ “iwate” ] = “盛岡”;
b[ “akita” ] = “秋田”;
var bCopy:Array = b.concat();
trace( “—–” );
trace( “b: ” + b[“hokkaido”] );
trace( “bCopy: ” + bCopy[“hokkaido”] );

bCopy = ArrayUtil.copyArray( b );
trace( “—–” );
trace( “bCopy: ” + bCopy[“hokkaido”] );

/**
* Object でハッシュ配列
*/
var c:Object = {};
c[ “hokkaido” ] = “札幌”;
c[ “aomori” ] = “青森”;
c[ “iwate” ] = “盛岡”;
c[ “akita” ] = “秋田”;
trace( “—–” );
trace( ‘c[“hokkaido”]: ‘ + c[“hokkaido”] );
var cCopy:Object = ObjectUtil.copy( c );
trace( “—–” );
trace( ‘cCopy[“hokkaido”]: ‘ + cCopy[“hokkaido”] );
cCopy[“hokkaido”] = “札幌市”;
trace( “—–” );
trace( ‘c[“hokkaido”]: ‘ + c[“hokkaido”] );
trace( ‘cCopy[“hokkaido”]: ‘ + cCopy[“hokkaido”] );
}

}
}

実行結果は、

-----
a: hokkaido,aomori,iwate,akita
aCopy: hokkaido,aomori,iwate,akita
-----
a: hokkaido,aomori,iwate,akita
aCopy: hokkaido,aomori,iwate,akita,miyagi
-----
aCopyTwo: hokkaido,aomori,iwate,akita
-----
a: hokkaido,aomori,iwate,akita
aCopyTwo: hokkaido,aomori,iwate,akita,yamagata
-----
a: hokkaido,aomori,iwate,akita,fukushima
aCopyThree: hokkaido,aomori,iwate,akita,fukushima
-----
b: 札幌
bCopy: undefined
-----
bCopy: undefined
-----
c["hokkaido"]: 札幌
-----
cCopy["hokkaido"]: 札幌
-----
c["hokkaido"]: 札幌
cCopy["hokkaido"]: 札幌市

結論としては、

  • as3でハッシュ配列を使うときは、Array型ではなくObject型

である。
もし、Array型でハッシュ的に配列を使った場合、

  • オブジェクトごとのコピーができない。
  • Object型でも同じだが、Array.lengthは使えない。

ということになる。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA