●昇降優先表ソート

情報

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

概要

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

解説

引数

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で戻る。


名前:
コメント:


タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2009年03月24日 22:06
ツールボックス

下から選んでください:

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