字符串的自定义顺序
本文关键字:顺序 自定义 字符串 | 更新日期: 2023-09-27 18:37:00
我有班级成绩,我需要检查特定成绩是通过还是失败。以下是按顺序排列的成绩列表:
- 一个
- 一个-
- B+
- 乙
- B-
如果B
是及格分数,并且学生有B+
,使用正常的排序,如果我检查学生成绩是否>及格标记,那么它会说它失败,因为系统对字符串进行排序如下:
- 一个
- 一个-
- 乙
- B+
- 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);