78.List中的Sort委托返回值翻译
78.1 题目
C#中List中的Sort方法中,传入的比较器委托函数,返回的-1,0,1代表什么意思?
78.2 深入解析
在C#中,List<T>.Sort 方法可以接受一个比较器委托函数,用于自定义排序逻辑。这个比较器委托函数通常是一个 Comparison<T> 类型的委托,定义如下:
public delegate int Comparison<in T>(T x, T y);
比较器委托函数需要返回一个整数值,用来表示两个对象的排序顺序。返回值的含义如下:
- -1:如果返回值为-1,表示第一个参数
x小于第二个参数y,在排序中x将排在y之前。 - 0:如果返回值为0,表示
x等于y,在排序中x和y的相对位置保持不变。 - 1:如果返回值为1,表示
x大于y,在排序中x将排在y之后。
示例代码
以下是一个示例代码,演示如何使用 Sort 方法和比较器委托函数对 List<int> 进行排序:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 5, 3, 8, 1, 2 };
// 使用Sort方法,并传入一个Comparison委托函数
numbers.Sort((x, y) =>
{
if (x < y) return -1; // x小于y,返回-1
else if (x > y) return 1; // x大于y,返回1
else return 0; // x等于y,返回0
});
// 输出排序后的列表
Console.WriteLine("排序后的列表: " + string.Join(", ", numbers));
}
}
在这个示例中,我们传入了一个匿名函数作为比较器委托,该函数根据两个整数的大小关系返回-1、0或1,最终实现了对列表的升序排序。
示例代码解析
if (x < y) return -1;:如果x小于y,返回 -1,表示x应该排在y前面。else if (x > y) return 1;:如果x大于y,返回 1,表示x应该排在y后面。else return 0;:如果x等于y,返回 0,表示x和y的顺序不变。
通过这种方式,我们可以灵活地控制列表的排序逻辑,实现自定义的排序需求。
78.3 答题示例
“在C#的
List<T>.Sort(Comparison<T>)方法中,比较器委托的返回值规则如下:
返回负值(如-1):表示x小于y,排序后x会出现在y之前。返回零(0):表示x等于y,排序后两者的相对位置可能保持不变(取决于具体实现,如Array.Sort是稳定排序,而List.Sort通常不稳定)。返回正值(如1):表示x大于y,排序后x会出现在y之后。这个规则与
IComparable<T>接口的CompareTo方法一致,本质上都是定义“小于/等于/大于”的传递性顺序。例如,若要实现降序排序,只需交换x和y的比较逻辑:return y - x;。”
78.4 关键词联想
- 比较器(Comparer)
- IComparable
接口 - 稳定排序 vs 不稳定排序
- 委托(delegate)
- Lambda表达式
- 传递性(Transitivity)
- 升序/降序排序
- 自定义排序逻辑
- 三向比较(Three-Way Comparison)
- Sort方法重载(IComparer
参数)
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com