ひのはる/YAYAで配列をソートする関数
の編集
./?%E3%81%B2%E3%81%AE%E3%81%AF%E3%82%8B/YAYA%E3%81%A7%E9%85%8D%E5%88%97%E3%82%92%E3%82%BD%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E9%96%A2%E6%95%B0
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
殊海夕音/FINE/template
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('_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 ) } }
タイムスタンプを変更しない
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('_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 ) } }
テキスト整形のルールを表示する