我的查询的简单版本:
我有一个列表[10,500,49,3,8585,6726,721661,7623,76]。
我应用list.Sort(),得到排序后的列表[3,10,49,76,500,6726,7623,8585,721661]。
如果我尝试了解下面的逻辑,则可以看到正在使用一个“与函数比较”,该函数根据比较结果返回1,-1或0。现在,我想了解的是这些链接的问题未能回答的问题是如何根据返回的是1还是0或-1对10,500,49,..进行排序。那么,如果500> 10返回1,如何进行交换?交换在哪里完成?它的逻辑是什么?排序方法是否实现了交换逻辑?
这个问题不是重复的。我想了解C#中sort方法的逻辑。请仔细阅读完整的问题,以了解我的查询。不要将其标记为重复,也不要使Stack Overflow成为一个苛刻的社区。我只是问我是否在任何地方都找不到答案。
我想知道以下返回1、0,-1的代码实际上如何对列表进行排序。
public int CompareTo(Employee other)
{
if (this.Salary > other.Salary)
return 1;
else if (this.Salary < other.Salary)
return -1;
else
return 0;
}
List<Employee> lstNewEmp = new List<Employee>();
lstEmp.Add(new Employee() { Id = 5, Name = "k", Experience = 3, Salary = 425000 });
lstEmp.Add(new Employee() { Id = 6, Name = "u", Experience = 4, Salary = 450000 });
lstEmp.Add(new Employee() { Id = 7, Name = "t", Experience = 6, Salary = 425000 });
lstEmp.Add(new Employee() { Id = 8, Name = "z", Experience = 3, Salary = 700000 });
foreach(var i in lstEmp)
{
Console.WriteLine("Before Sorting: " + " "+ "Emp No: " + lstEmp.IndexOf(i) + " " + "Employee Name " + i.Name);
}
lstemp.Sort();
foreach(var i in lstEmp)
{
Console.WriteLine("After Sorting: " + " "+ "Emp No: " + lstEmp.IndexOf(i) + " " + "Employee Name " + i.Name);
}
为进一步解释我的查询,如果当前实例Salary大于我们与之比较的实例的薪水,则此函数应返回1。但是,如果我在员工列表上使用Sort()函数(该函数使用上面的CompareTo()逻辑对列表进行实际排序),则不会得到返回1或0或-1,而是会得到排序的列表。这是我无法理解的。有人可以解释一下吗?