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可以是通过标记 只是一个想法。您可以创
B
是及格分数,并且学生有B+
,使用正常顺序,如果我检查studentGrade>是否是及格分数,那么它会说它失败,因为系统按如下顺序排列字符串:
如何设置自定义比较器,将列表排序为c#中的第一个列表?如何通过数值设置字母等级
- A=4.0
- A-=3.7
- B+=3.3
- B=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”。。。