字符串的自定义排序

时间:2012-06-13 18:36:54

标签: c#

我有班级成绩,我需要检查特定成绩是否合格。这是按顺序排列的成绩列表:

  1. A
  2. A -
  3. B +
  4. 乙 -
  5. 如果B是通过标记,并且学生有B+,则使用正常排序,如果我检查studentGrade> passMark,然后它会说它失败了,因为系统按如下顺序排序字符串:

    1. A
    2. A -
    3. B +
    4. 乙 -
    5. 如何设置自定义比较器以将列表排序为c#中的第一个列表?

5 个答案:

答案 0 :(得分:4)

如何按数值设置字母等级?

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

依旧......

然后按数字而不是字母等级排序。 3.0可以是通行证。

只是一个想法。

答案 1 :(得分:3)

您可以创建一个实现IComparer<string>的自定义类,并根据需要使用它来进行排序。

话虽这么说,成绩往往是数字处理而不是字符串比较。使用数值会使这变得更加简单。

答案 2 :(得分:3)

使用sort method of the List<> class并提供自定义Comparison是最佳选择(至少单向)。

答案 3 :(得分:2)

Enum给他们一个体重怎么样?

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

创建自定义比较器时更容易。

public class GradeComparer : IComparer {}

之后通过调用列表上的.Sort()方法轻而易举地实现它。

答案 4 :(得分:-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);