●昇降優先表ソート

「●昇降優先表ソート」の編集履歴(バックアップ)一覧に戻る

●昇降優先表ソート - (2009/03/24 (火) 22:06:07) のソース

*情報
作者名:五十六
引用元:なし

*概要
表列(二次元配列)をオプション(昇順,降順)の優先順位でソートします。

*解説
***引数
SS:表列
VV:ソートオプション(AA,BB,CC) の配列(上にあるほど優先順位が高い)
 AA:対象の列(数値、0起点)
 BB:昇順or降順
 CC:「文字」or「数値」or「日付」or「時間」or配列カスタムソート用のプログラムS(*を入れておくとAAに置換される)
 
 日付 yyyy/mm/dd 
 時間 hh:mm:ss (共に昇順で古い時間帯からソートする)

***返り値
ソートされた表列

*サンプルプログラム
 A=「E,4,d
 B,1,5
 A,1,h
 B,1,3
 C,3,q」をCSV取得。
 
 オプション=「1,昇順,数値
 0,降順,文字
 2,昇順,数値」。
 
 //1列目を昇順で数値ソートした後
 //0列目を降順で文字ソートした後
 //2列目を昇順で数値ソートします。
 
 A=Aをオプションで昇降優先表ソート。
 
 Aを言う。
 /*
 B,1,3
 B,1,5
 A,1,h
 C,3,q
 E,4,d
 */

*//本体
 ●昇降優先表ソート(SSをVVで)
   既並列とは配列=空。今値とは配列=空。前値とは配列=空。結果とは配列=空。補助とは配列=空。
   VVで反復
     結果=空。補助=空。初処理=いいえ。今値=空。前値=空。対象を「,」で区切る。AA=それ[0]。BB=それ[1]。CC=それ[2]。
     //0=昇順。1=降順。ということにしようと思ったけどわかりやすいように「昇順」「降順」そのまま
     もし、BB=「降順」ならば
       //昇順
       もし、既並列=空ならば
         //初処理
         もし、CC=「数値」ならば、SS=SSのAAを表数値ソート。
         もし、CC=「文字」ならば、SS=SSのAAを表ソート。
         もし、CC=「日付」ならば、SS=SSを「B[{AA}]とA[{AA}]の日数差」で配列カスタムソート。
         もし、CC=「時間」ならば、SS=SSを「B[{AA}]とA[{AA}]の時間差」で配列カスタムソート。
         違えば、CC=CCの「*」をAAに置換。SS=SSをCCで配列カスタムソート。
         既並列にAAを配列追加。続ける。
       違えば
         //二回目以降
         SSで反復
           NN=対象。今値=空。既並列で反復、今値にNN[対象]を配列追加。
           //初処理
           もし、初処理=いいえならば、補助にNNを配列追加。前値=今値。初処理=はい。続ける。
           もし、前値≠今値ならば
             //前値と違う場合
             もし、補助の配列要素数≠「1」ならば
               もし、CC=「数値」ならば、補助=補助のAAを表数値ソート。
               もし、CC=「文字」ならば、補助=補助のAAを表ソート。
               もし、CC=「日付」ならば、補助=補助を「B[{AA}]とA[{AA}]の日数差」で配列カスタムソート。
               もし、CC=「時間」ならば、補助=補助を「B[{AA}]とA[{AA}]の時間差」で配列カスタムソート。
               違えば、CC=CCの「*」をAAに置換。補助=補助をCCで配列カスタムソート。
               
             補助で反復、対象を結果に配列追加。
             補助=空。補助にNNを配列追加。前値=今値。
             
           違えば
             //前値と同じ場合
             補助にNNを配列追加。前値=今値。
           
         もし、補助の配列要素数≠「1」ならば
           もし、CC=「数値」ならば、補助=補助のAAを表数値ソート。
           もし、CC=「文字」ならば、補助=補助のAAを表ソート。
           もし、CC=「日付」ならば、補助=補助を「B[{AA}]とA[{AA}]の日数差」で配列カスタムソート。
           もし、CC=「時間」ならば、補助=補助を「B[{AA}]とA[{AA}]の時間差」で配列カスタムソート。
           違えば、CC=CCの「*」をAAに置換。補助=補助をCCで配列カスタムソート。
         補助で反復、対象を結果に配列追加。
         既並列にAAを配列追加。
        
     違えば
       //降順
       もし、既並列=空ならば
         //初処理
         もし、CC=「数値」ならば、SS=SSのAAを表数値ソート。
         もし、CC=「文字」ならば、SS=SSのAAを表ソート。
         もし、CC=「日付」ならば、SS=SSを「B[{AA}]とA[{AA}]の日数差」で配列カスタムソート。
         もし、CC=「時間」ならば、SS=SSを「B[{AA}]とA[{AA}]の時間差」で配列カスタムソート。
         違えば、CC=CCの「*」をAAに置換。SS=SSをCCで配列カスタムソート。
         SSを配列逆順。
         既並列にAAを配列追加。続ける。
       違えば
         //二回目以降
         SSで反復
           NN=対象。今値=空。既並列で反復、今値にNN[対象]を配列追加。
           //初処理
           もし、初処理=いいえならば、補助にNNを配列追加。前値=今値。初処理=はい。続ける。
           
           もし、前値≠今値ならば
             //前値と違う場合
             もし、補助の配列要素数≠「1」ならば
               もし、CC=「数値」ならば、補助=補助のAAを表数値ソート。
               もし、CC=「文字」ならば、補助=補助のAAを表ソート。
               もし、CC=「日付」ならば、補助=補助を「B[{AA}]とA[{AA}]の日数差」で配列カスタムソート。
               もし、CC=「時間」ならば、補助=補助を「B[{AA}]とA[{AA}]の時間差」で配列カスタムソート。
               違えば、CC=CCの「*」をAAに置換。補助=補助をCCで配列カスタムソート。
               補助を配列逆順。
             補助で反復、対象を結果に配列追加。
             補助=空。補助にNNを配列追加。前値=今値。
             
           違えば
             //前値と同じ場合
             補助にNNを配列追加。前値=今値。
         もし、補助の配列要素数≠「1」ならば
           もし、CC=「数値」ならば、補助=補助のAAを表数値ソート。
           もし、CC=「文字」ならば、補助=補助のAAを表ソート。
           もし、CC=「日付」ならば、補助=補助を「B[{AA}]とA[{AA}]の日数差」で配列カスタムソート。
           もし、CC=「時間」ならば、補助=補助を「B[{AA}]とA[{AA}]の時間差」で配列カスタムソート。
           違えば、CC=CCの「*」をAAに置換。補助=補助をCCで配列カスタムソート。
           補助を配列逆順。
         補助で反復、対象を結果に配列追加。
         既並列にAAを配列追加。
     SS=結果。
   SSで戻る。

----
#comment()

----
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。