C# List.Sort与IComparer接口及Comparison委托应用于集合排序
C#里List.Sort的用法
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ListSort { class Program { static void Main(string[] args) { List<C> L = new List<C>(); L.Add(new C { n = 1, s = "b" }); L.Add(new C { n = 3, s = "a" }); L.Add(new C { n = 2, s = "c" });<br> // 方法1 使用Comparison<T>委托。 L.Sort((left, right) => { if (left.n > right.n) return 1; else if (left.n == right.n) return 0; else return -1; }); // 方法2 使用IComparer<T>接口。 L.Sort(new CComparer()); // 方法3 除以上两种方法以外还可以使用另一种方法,在C类中实现IComparable<T> L.Sort(); } } //方法二 public class CComparer : IComparer<C> { public int Compare(C left, C right) { if (left.n > right.n) return 1; else if (left.n == right.n) return 0; else return -1; } } //方法三 public class C : IComparable<C> { public int n; public string s; public int CompareTo(C other) { if (this.n > other.n) return 1; else if (this.n == other.n) return 0; else return -1; } } }
IComparer接口及Comparison委托应用于集合排序
需要对list进行排序,可以用list.Sort()方法。该方法有多个重载。
(1)使用IComparer<T>接口
可以为Sort传入IComparer<T>的实现类的实例对象,该接口为:
public interface IComparer<in T> { //如果x小于y,则返回负数;x大于y,返回正数;等于则返回0 int Compare(T x, T y); }
void Sort(IComparer<T> comparison);
如果使用IComparer<T>实现类的实例对象,则需要实现定义好实现类,对于已经定义好的,则比较方便,否则相对麻烦一些。
(2)使用Comparison<T>委托
但是对于没有定义IComparer<T>的实现类的场合,可以使用更为方便的方式,即使用Comparison<T>委托作为参数。
public delegate int Comparison<in T>(T x, T y);
void Sort(Comparison<T> comparison);
具体使用时,可以直接传入委托(或函数名称),也可以直接使用numda表达式。以下是使用Lambda表达式的方法代码:
List<Student> list=new List<Student>(); //Student类中含有Age属性 list.AddRange(....); //添加数据 //以下对Student集合按照其Age属性从小到大排序 list.Sort( (x, y) => { if (x.Age < y.Age) { return -1; } else if (x.Age > y.Age) { return 1; } else return 0; } ); //或者以下更加简单的写法 list.sort((x,y)=>x.Age.CompareTo(y.Age));
https://www.cnblogs.com/talentzemin/p/3930368.html
https://blog.csdn.net/jiuzaizuotian2014/article/details/82425521
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗