1. ホーム
  2. c#

[解決済み] C# List<> sort by x then y

2023-04-18 17:22:43

質問

類似の リスト<>アルファベット順に並べる と同様に、ある要素でソートし、次に別の要素でソートすることができます。

SELECT * from Table ORDER BY x, y  

いくつかのソート関数を含むクラスがあり、1つの要素でソートすることに問題はありません。

例えば

public class MyClass {
    public int x;
    public int y;
}  

List<MyClass> MyList;

public void SortList() {
    MyList.Sort( MySortingFunction );
}

そして、リストには以下のようなものがあります。

Unsorted     Sorted(x)     Desired
---------    ---------    ---------
ID   x  y    ID   x  y    ID   x  y
[0]  0  1    [2]  0  2    [0]  0  1
[1]  1  1    [0]  0  1    [2]  0  2
[2]  0  2    [1]  1  1    [1]  1  1
[3]  1  2    [3]  1  2    [3]  1  2

安定したソートが望ましいですが、必須ではありません。.Net 2.0用に動作するソリューションが歓迎されます。

どのように解決するのですか?

すべてのメンバーを比較する場合、安定したソートは必要ないことを覚えておいてください。 要求された2.0の解決策は、次のようになります。

 public void SortList() {
     MyList.Sort(delegate(MyClass a, MyClass b)
     {
         int xdiff = a.x.CompareTo(b.x);
         if (xdiff != 0) return xdiff;
         else return a.y.CompareTo(b.y);
     });
 }

この2.0ソリューションは、人気のある3.5のLinqソリューションよりもまだ好ましいものであることに注意してください。 もちろん、元のリスト オブジェクトに手をつけないことを希望している場合を除きます。