C# 字符串的自定义排序

C# 字符串的自定义排序,c#,C#,我有班级成绩,我需要检查一个具体的成绩是通过还是不通过。这是按顺序排列的等级列表: A A- B+ B B- 如果B是及格分数,并且学生有B+,使用正常顺序,如果我检查studentGrade>是否是及格分数,那么它会说它失败,因为系统按如下顺序排列字符串: A A- B B+ B- 如何设置自定义比较器,将列表排序为c#中的第一个列表?如何通过数值设置字母等级 A=4.0 A-=3.7 B+=3.3 B=3.0 等等 然后按数值而不是字母等级排序3.0可以是通过标记 只是一个想法。您可以创

我有班级成绩,我需要检查一个具体的成绩是通过还是不通过。这是按顺序排列的等级列表:

  • A
  • A-
  • B+
  • B
  • B-
  • 如果
    B
    是及格分数,并且学生有
    B+
    ,使用正常顺序,如果我检查studentGrade>是否是及格分数,那么它会说它失败,因为系统按如下顺序排列字符串:

  • A
  • A-
  • B
  • B+
  • B-

  • 如何设置自定义比较器,将列表排序为c#中的第一个列表?

    如何通过数值设置字母等级

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

    然后按数值而不是字母等级排序<代码>3.0可以是通过标记


    只是一个想法。

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


    也就是说,分数通常是通过数字处理的,而不是通过字符串比较。使用数字值将使此操作简单得多。

    使用并提供自定义是一种方法(至少有一种方法)。

    使用枚举给它们一个权重如何

    public enum ComparisonType
    { 
        A = 1, 
        AM = 2, 
        BP = 3,
        B = 4,
        BM = 5
    }
    
    它使创建自定义比较器更容易

    public class GradeComparer : IComparer {}
    
    在这之后,通过调用列表上的.Sort()方法就很容易了,瞧吧。

    试试以下方法:

    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);
    
    公共类MyComparer:IComparer
    {     
    公共整数比较(字符串s1、字符串s2)
    {
    变量grad1=s1.Replace('+','1')。Replace('-','2');
    变量grad2=s2.Replace('+','1')。Replace('-','2');
    如果(梯度1>梯度2)
    retun 1;
    否则如果(梯度1<梯度2)
    返回-1;
    其他的
    返回0;
    }
    }
    列表=新列表{“A”、“A+”、“A-”};
    var sortedList=list.OrederBy(o=>o,new MyComparer()).OrderBy(o=>o.Length);
    
    自定义比较器是解决此问题的合理选择,但您需要在此做一些准备工作。您可能希望将+替换为0,不在“1”后面添加任何内容,将“-”替换为“2”。。。