78.List中的Sort委托返回值翻译

  1. 78.List中的Sort委托返回值翻译
    1. 78.1 题目
    2. 78.2 深入解析
      1. 示例代码
      2. 示例代码解析
    3. 78.3 答题示例
    4. 78.4 关键词联想

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,在排序中 xy 的相对位置保持不变。
  • 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,表示 xy 的顺序不变。

通过这种方式,我们可以灵活地控制列表的排序逻辑,实现自定义的排序需求。


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方法一致,本质上都是定义“小于/等于/大于”的传递性顺序。例如,若要实现降序排序,只需交换xy的比较逻辑:return y - x;。”


78.4 关键词联想

  • 比较器(Comparer)
  • IComparable接口
  • 稳定排序 vs 不稳定排序
  • 委托(delegate)
  • Lambda表达式
  • 传递性(Transitivity)
  • 升序/降序排序
  • 自定义排序逻辑
  • 三向比较(Three-Way Comparison)
  • Sort方法重载(IComparer参数)


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏