C#中的CompareTo()返回的值(-1或1或0)如何对数字进行实际排序

时间:2018-07-03 06:05:03

标签: c# compareto

我的查询的简单版本:

我有一个列表[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,而是会得到排序的列表。这是我无法理解的。有人可以解释一下吗?

0 个答案:

没有答案