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 )
 	}	
 	
 }

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS