字符串的自定义顺序

本文关键字:顺序 自定义 字符串 | 更新日期: 2023-09-27 18:37:00

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

  1. 一个
  2. 一个-
  3. B+
  4. B-

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

  1. 一个
  2. 一个-
  3. B+
  4. B-

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

字符串的自定义顺序

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

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

等等....

然后按数值而不是字母等级排序。 3.0可以是及格线。

只是一个想法。

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

话虽如此,成绩通常以数字方式处理,而不是通过字符串比较来处理。 使用数值将使这变得简单得多。

使用 List<> 类的排序方法并提供自定义比较是要走的路(至少是一种方式)。

一个枚举来给他们一个权重怎么样?

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

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

public class GradeComparer : IComparer {}
之后,通过

调用 .排序() 方法在你的列表中,瞧。

试试这个:

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);