我必须比较一组不同的学生,以便得出以下结果:
Bloggs,John(工程学学士)等级:6
史密斯·约翰(工程学学士)等级:6
John,Bloggs,工程学学士学位:7
约翰·史密斯(工程学学士)等级:7
约翰·布洛格斯(IT学士)成绩:6
史密斯·约翰(IT学士)成绩:6
约翰·布洛格斯(IT学士)成绩:7
史密斯·约翰(IT学士)成绩:7
Bloggs,Jane(工程学学士)等级:6
Smith,Jane(工程学学士)等级:6
Bloggs,Jane(工程学学士)等级:7
Smith,Jane(工程学学士)等级:7
Bloggs,Jane(IT学士)成绩:6
Smith,Jane(IT学士)等级:6
Bloggs,Jane(IT学士)成绩:7
Smith,Jane(IT学士)等级:7
我的输出与此类似,但是我需要它从下至上进行比较。
我不能使用array.Reverse方法,因为我的代码的主要方法不会被调用。我需要我的compareTo方法对此进行排序,以便获得以下结果:
名字按降序排列,后跟... 学位按升序排列,其次是... 升序排列,然后... 姓氏升序。
main方法运行一个数组。排序
我尝试几次重新排列我的compareTo()方法,但不会将这些值按正确的顺序放置。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StudentGradeOrder
{
class Student : IComparable
{
private string firstName;
private string lastName;
private string degree;
private int grade;
/*Implementation of Parameterized constructor */
public Student(string firstName, string lastName, string degree, int grade)
{
this.firstName = firstName;
this.lastName = lastName;
this.degree = degree;
this.grade = grade;
}
/*Implementation of ToString method */
public override string ToString()
{
return String.Format("{0} , {1}, {2} Grade {3}", lastName, firstName, degree, grade);
}
/*Implementation of CompareTo method */
public int CompareTo(object obj)
{
Student studentObject = (Student)obj;
var firstnameofStudent = studentObject.firstName.CompareTo(firstName);
if (firstnameofStudent == 0)
{
var degreeValue = studentObject.degree.CompareTo(degree);
if (degreeValue == 0)
{
var gradeValue = studentObject.grade.CompareTo(grade);
if (gradeValue == 0)
{
var lastnameofStudent = studentObject.lastName.CompareTo(lastName);
if (lastnameofStudent == 0)
return lastnameofStudent;
}
return gradeValue;
}
return degreeValue;
}
return firstnameofStudent;
}
答案 0 :(得分:0)
我可以在这里看到两个错误: 1.返回firstnameofStudent时,应将其乘以-1以实现降序 2.无需在返回之前将lastnameofStudent与0进行比较,您无需进行进一步的字段比较
答案 1 :(得分:0)
如果您只想颠倒顺序,则可以包装CompareTo
方法并返回颠倒的结果。
将CompareTo
重命名为其他名称,例如InternalCompareTo
实施新的CompareTo
方法,该方法返回相反的结果:
public int CompareTo(object obj)
{
var result = InternalCompareTo(obj)
if(result > 0)
return -1;
else if(result < 0)
return 1;
return 0;
}