我有班级成绩,我需要检查特定成绩是通过还是失败。这是按顺序排列的等级列表:
- 一种
- 一种-
- 乙+
- 乙
- 乙-
如果B
是及格分数,并且学生有B+
,使用正常排序,如果我检查学生成绩> passMark,那么它会说它是失败的,因为系统将字符串排序如下:
- 一种
- 一种-
- 乙
- 乙+
- 乙-
如何设置自定义比较器以将列表排序为 C# 中的第一个列表?
我有班级成绩,我需要检查特定成绩是通过还是失败。这是按顺序排列的等级列表:
如果B
是及格分数,并且学生有B+
,使用正常排序,如果我检查学生成绩> passMark,那么它会说它是失败的,因为系统将字符串排序如下:
如何设置自定义比较器以将列表排序为 C# 中的第一个列表?
如何按数值设置字母等级?
等等....
然后按数值而不是字母等级排序。3.0
可以作为及格标志。
只是一个想法。
您可以创建一个实现 的自定义类IComparer<string>
,并根据需要使用它进行排序。
话虽如此,成绩通常以数字方式处理,而不是通过字符串比较。使用数值会使这更简单。
使用List<> 类的 sort 方法并提供自定义比较是可行的方法(至少一种方法)。
一个枚举给他们一个权重怎么样?
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);