ホーム >> 左脳ActionScript3 >> リファレンス(仮) >> >> データ型 >> コンポジット型 >> 配列 >> 配列のソート
配列のソート
Arrayクラスのsortメソッドを使用すると、配列の並び替えをする事が出来る。
基本的には「データを"文字列"としてみた時のアルファベット順(文字コード順)に並び替え」をし、配列の内容を更新する

  • sort
    引数なしの場合、データが文字列として扱われ、その文字列で比較される。
    
    var a:Array =   [1, 3, 5, 7, 9, 2, 4, 6, 8, 0, "z", "A", "!"];
    trace(a);
    a.sort();
    trace(a);
    

    
    1,3,5,7,9,2,4,6,8,0,z,A,!
    !,0,1,2,3,4,5,6,7,8,9,A,z
    


    文字列として比較するので、以下のような事結果を得る。
    
    var a:Array =   [10000,2000,300,40,5];
    trace(a);
    a.sort();
    trace(a);
    

    
    10000,2000,300,40,5
    10000,2000,300,40,5
    

    このような状況を回避する為、定数を指定する。
    Array.NUMERIC:文字列ではなく数値で比較するように指定。
    
    var a:Array =   [10000,2000,300,40,5];
    trace(a);
    a.sort(Array.NUMERIC);
    trace(a);
    

    
    10000,2000,300,40,5
    5,40,300,2000,10000
    
    ここで、要素に数値変換できないデータが混在していると、そのようなデータは NaN として扱われる。


    ソート関数を指定する場合。
    この場合、引数となるのは関数。フォーマットは決まっていて、2つのエレメントを引数にとる関数を指定しなければならない。以下、その関数の基本形。

    
    function 比較の関数名 ( エレメント1 , エレメント2 ):Number
    {
        if ( エレメント1がエレメント2の前に来るべき条件 )   return  -1;
        if ( エレメント2がエレメント1の前に来るべき条件 )   return  1;
        return  0;
    }
    
    関数に渡されるエレメントは、配列にあるオブジェクトがそのまま渡されるので、 配列の要素に様々な型が混在する場合に注意が必要。

    ex.) 2次元配列を、それぞれ配列の総和でソートする。
    
    var a:Array =   [[3, 4, 5], [1, 2, 3], [2, 3, 4], [10]];
    var i:int;
    for (i = 0; i < a.length; i++)  trace(a[i]);
    trace("SORT!");
    a.sort(
        function(a:Array, b:Array):int
        {
            var a_sum:int = 0;
            var b_sum:int = 0;
            var l:int;
            for (l = 0; l < a.length; l++)  a_sum +=    a[l];
            for (l = 0; l < b.length; l++)  b_sum +=    b[l];
            if (a_sum < b_sum)  return  -1;
            if (a_sum > b_sum)  return  1;
            return  0;
        }
    );
    for (i = 0; i < a.length; i++)  trace(a[i]);
    
    結果
    
    3,4,5
    1,2,3
    2,3,4
    10
    SORT!
    1,2,3
    2,3,4
    10
    3,4,5
    

ホーム >> 左脳ActionScript3 >> リファレンス(仮) >> >> データ型 >> コンポジット型 >> 配列 >> 配列のソート