AYA、YAYAで配列をソートする関数です。~
単純にソートするだけでなく、デリミタで区切られた特定のフィールドの内容によって~
ソートすることもできます。~
関数の使い方は次の通りです。
SortArray( Arrayname as String, Delimiter as String, TargetItemNumber as Integer )
-Arraynameは、ソートしたい汎用配列の名前です。その配列そのものがソートされます。
-Delimiterは、配列要素の中身がデリミタで区切られている場合に、デリミタを指定します。
-TargetItemNumberは、配列要素の中身のうち、注目するフィールドの番号を0ベースで指定します。
たとえば、「単語,読み,説明…」のようなエントリが並ぶ配列を、読みで並べ替えたいときに、~
デリミタに「,」、フィールド番号に「1」を指定します。
SortArray
{
SortArrayCore( _argv[0], 0, ARRAYSIZE(EVAL(EVAL('_a')))-1, _argv[1], _argv[2] )
SortArrayCore( _argv[0], 0, ARRAYSIZE(EVAL(EVAL('_argv[0]')))-1, _argv[1], _argv[2] )
}
SortArrayCore
{
_a = _argv[0] // ソートする配列の名前
_first = TOINT(_argv[1])
_last = TOINT(_argv[2])
_d = _argv[3]
_n = TOINT(_argv[4])
EVAL( "_x = EVAL(%('_a'))[(_first + _last)/2][ _n, _d ]" )
_i = _first
_j = _last
while 1
{
while ( EVAL(" %(EVAL('_a'))[_i][ _n, _d ]" ) < _x )
{
_i++
}
while ( _x < EVAL(" %(EVAL('_a'))[_j][ _n, _d ]" ) )
{
_j--
}
if ( _i >= _j )
{
break
}
EVAL("_t = %(EVAL('_a'))[_i] ")
EVAL(" %(EVAL('_a'))[_i] = %(EVAL('_a'))[_j] ")
EVAL(" %(EVAL('_a'))[_j] = _t ")
_i++
_j--
}
if ( _first < _i-1 )
{
ANCHOR.SortArrayCore( _a, _first, _i-1, _d, _n )
}
if ( _j+1 < _last )
{
ANCHOR.SortArrayCore( _a, _j+1, _last , _d, _n )
}
}