ひかくはいれつ
2つの配列が等しいかどうかをどのように判断しますか?解決策は配列をループし、対応する位置の各要素を1つずつ比較します.配列は参照タイプであるため、=オペレータを使用すると、参照が同じメモリ空間を指しているかどうかを比較できます.たとえば、次のようにします.
ただし、配列の内容が同じですが、異なるメモリ領域では=操作はfalseを返します.
したがって、比較配列は、配列の各要素が等しいかどうかを比較する必要があります.
またArrayUtilitiesを用いることもできる.equals()メソッドで、2つのパラメータが必要です.2つの配列参照、ブール値を返して等しいかどうかを示します.
デフォルトでは、2つの異なる配列の配列は等しくありません.3番目のパラメータがtrueである場合を除き、配列の配列順序を無視します.
equals()メソッドは簡単です.次はコードです.
var letters:Array = [
"a",
"b",
"c",
"d"];
var lettersPointer:Array = letters;
trace(letters == lettersPointer);
// : true
ただし、配列の内容が同じですが、異なるメモリ領域では=操作はfalseを返します.
var letters1:Array = [
"a",
"b",
"c",
"d"];
var letters2:Array = [
"a",
"b",
"c",
"d"];
trace(letters1 == letters2];
// : false
したがって、比較配列は、配列の各要素が等しいかどうかを比較する必要があります.
var equivalent:Boolean =
true;
for(
var i:
int = 0; i < letters1.length; i++) {
if(letters1[i] != letters2[i]) {
equivalent =
false;
break;
}
}
trace(equivalent);
// : true
またArrayUtilitiesを用いることもできる.equals()メソッドで、2つのパラメータが必要です.2つの配列参照、ブール値を返して等しいかどうかを示します.
var letters1:Array = [
"a",
"b",
"c",
"d"];
var letters2:Array = [
"a",
"b",
"c",
"d"];
trace(ArrayUtilities.equals(letters1, letters2));
// : true
デフォルトでは、2つの異なる配列の配列は等しくありません.3番目のパラメータがtrueである場合を除き、配列の配列順序を無視します.
var letters1:Array = [
"a",
"b",
"c",
"d"];
var letters2:Array = [
"b",
"a",
"d",
"c"];
trace(ArrayUtilities.equals(letters1, letters2));
// : false
trace(ArrayUtilities.equals(letters1, letters2,
true));
// : true
equals()メソッドは簡単です.次はコードです.
public
static
function equals(arrayA:Array, arrayB:Array,
bNotOrdered:Boolean):Boolean {
//
if(arrayA.length != arrayB.length) {
return
false;
}
// ,
var arrayACopy:Array = arrayA.concat( );
var arrayBCopy:Array = arrayB.concat( );
//
if(bNotOrdered) {
arrayACopy.sort( );
arrayBCopy.sort( );
}
// , , , false
for(
var i:
int = 0; i < arrayACopy.length; i++) {
if(arrayACopy[i] != arrayBCopy[i]) {
delete arrayACopy;
delete arrayBCopy;
return
false;
}
}
// , , true
delete arrayACopy;
delete arrayBCopy;
return
true;
}