C# – ListによるListのソート

そもそもとして、クラスなり構造体なりを作って操作すべきこと。

でも、とにかくあの時の僕は、
ListでListをソートしたかったんだ・・・。

ある配列のソート結果に従って
別の配列のソートをしてみよう。

ある日、僕は個人的に使うために
ゲームのデータをまとめるソフトウェアを作っていた。
大した設計もなく思い浮かんだままにコードを書いていると
当然のように出てくる不整合。

そして不整合を解決するために発生する不整合。
負のスパイラル。負のスパゲティ。

それでもめげずにゴリゴリとプログラムを書いていると、
Listのソートを利用して別のListをソートすると便利そうだった。

例えば・・・

public class Sort{
    public static void Main(){
       var sortList = new List<int>{
           0,
           2,
           1,
       };
       var targetList = new List<string>{
           "hoge",
           "fuga",
           "piyo",
       };
  
       foreach(var str in targetList){
           Console.WriteLine(str);
       }
    }
}

出力:
hoge
fuga
piyo

これをなんとか、
sortListのソート結果に依存するようにtargetListを並び替えたかった。
どうにか綺麗にできないかと悩んだ。

public class Sort{
    public static void Main(){
       var sortList = new List<int>{
           0,
           2,
           1,
       };
       var targetList = new List<string>{
           "hoge",
           "fuga",
           "piyo",
       };

       
       var dstList = sortList.Zip(targetList,(i,str) => new {index = i, data = str}).ToList();
       dstList.Sort((a,b) => a.index - b.index);
       targetList = dstList.Select(p => p.data).ToList();
       
       foreach(var str in targetList){
           Console.WriteLine(str);
       }
    }
}

出力:
hoge
piyo
fuga

うーん・・・
綺麗ではないが動く・・・・・

この時点で、既に書いたプログラムを捨てて
不整合が発生した部分を織り込んで設計から始めたほうが早そうだった。

そうして、僕はそのソフトウェアを作るのをやめた。

カテゴリーC#

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です