2

特定の成績が合格か不合格かを確認する必要があるクラスの成績があります。これは順番に等級のリストです:

  1. A-
  2. B+
  3. B
  4. B-

Bが合格点で、生徒が を持っている場合B+、通常の順序付けを使用して、studentGrade > passMark かどうかを確認すると、システムが文字列を次のように順序付けするため、不合格となります。

  1. A-
  2. B
  3. B+
  4. B-

リストをC#の最初のリストとして注文するためのカスタム比較子を設定するにはどうすればよいですか?

4

5 に答える 5

4

文字のグレードを数値で設定してみませんか?

  • A = 4.0
  • A- = 3.7
  • B+ = 3.3
  • B=3.0

等々....

次に、文字の等級ではなく数値で並べ替えます。3.0合格点になりえます。

ちょっとした考え。

于 2012-06-13T18:39:53.353 に答える
3

を実装するカスタム クラスを作成し、IComparer<string>それを使用して必要に応じて順序付けを行うことができます。

そうは言っても、成績は文字列比較ではなく数値で処理されることがよくあります。数値を使用すると、これがはるかに簡単になります。

于 2012-06-13T18:40:48.940 に答える
3

List<> クラスの sort メソッドを使用し、カスタムの比較を提供するのが (少なくとも 1 つの方法) 方法です。

于 2012-06-13T18:42:21.060 に答える
2

それらに重みを与える列挙型はどうですか?

public enum ComparisonType
{ 
    A = 1, 
    AM = 2, 
    BP = 3,
    B = 4,
    BM = 5
}

カスタム比較ツールを作成するときに簡単になります。

public class GradeComparer : IComparer {}

その後、リストの.Sort()メソッドを呼び出すだけで簡単にできます。

于 2012-06-13T18:46:35.357 に答える
-1

これを試して :

public class MyComparer : IComparer<MyObject>
{     
    public int Compare(string s1, string s2)
    {
          var grad1 = s1.Replace('+','1').Replace('-','2');
          var grad2 = s2.Replace('+','1').Replace('-','2');             
          if (grad1 > grad2)
              retun 1;
          else if (grad1 < grad2)
              return -1;
          else
              return 0;

    }
}


List<string> list = new List<string>{"A","A+","A-"};

var sortedList = list.OrederBy(o=>o,new MyComparer()).OrderBy(o=>o.Length);
于 2012-06-13T18:47:51.933 に答える