2

我有班级成绩,我需要检查特定成绩是通过还是失败。这是按顺序排列的等级列表:

  1. 一种
  2. 一种-
  3. 乙+
  4. 乙-

如果B是及格分数,并且学生有B+,使用正常排序,如果我检查学生成绩> passMark,那么它会说它是失败的,因为系统将字符串排序如下:

  1. 一种
  2. 一种-
  3. 乙+
  4. 乙-

如何设置自定义比较器以将列表排序为 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 方法并提供自定义比较是可行的方法(至少一种方法)。

于 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 回答