我有班级成绩,我需要检查特定成绩是否合格。这是按顺序排列的成绩列表:
如果B
是通过标记,并且学生有B+
,则使用正常排序,如果我检查studentGrade> passMark,然后它会说它失败了,因为系统按如下顺序排序字符串:
如何设置自定义比较器以将列表排序为c#中的第一个列表?
答案 0 :(得分:4)
如何按数值设置字母等级?
依旧......
然后按数字而不是字母等级排序。 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);