当前位置: 首页 > news >正文

在C#中对List<T>实现多属性排序

本文介绍了四种实现多级排序的方法:1. LINQ链式调用:使用OrderByThenBy实现多级排序,直观易读,适合动态需求,返回新列表。2. 自定义比较器(IComparer):适用于复杂或高频排序,性能高,适合固定规则,原地排序。3. 动态排序(反射+LINQ):根据属性名动态排序,需处理反射性能开销和空值。4. 性能对比:LINQ适合简单排序,自定义比较器适合高频复杂排序,动态排序性能较低。示例类Person包含NameAgeScore属性。

可通过‌OrderBy+ThenBy链式调用‌或‌自定义IComparer‌实现,以下是具体方法及示例:

1. LINQ 方法(推荐)‌


使用OrderBy和ThenBy实现多级排序:
 

List<Person> people = new List<Person> {new Person { Name = "Alice", Age = 25, Score = 80 },new Person { Name = "Bob", Age = 30, Score = 90 },new Person { Name = "Alice", Age = 20, Score = 85 }
};// 先按Name升序,再按Age降序,最后按Score升序
var sorted = people.OrderBy(p => p.Name).ThenByDescending(p => p.Age).ThenBy(p => p.Score).ToList();

特点‌:

直观易读,适合动态排序需求。
返回新列表,原列表不变。


‌2. 自定义比较器(IComparer<T>)‌


适用于复杂排序逻辑或需要复用的场景:

class PersonComparer : IComparer<Person> {public int Compare(Person x, Person y) {int nameCompare = x.Name.CompareTo(y.Name);if (nameCompare != 0) return nameCompare;int ageCompare = y.Age.CompareTo(x.Age); // 降序if (ageCompare != 0) return ageCompare;return x.Score.CompareTo(y.Score);}
}// 使用比较器排序
people.Sort(new PersonComparer());

‌特点‌:

性能更高(原地排序)。
适合固定排序规则。

‌3. 动态排序(反射+LINQ)‌


根据属性名动态指定排序字段:

var propertyName = "Age"; // 可动态传入
var ordered = people.OrderBy(p => p.GetType().GetProperty(propertyName)?.GetValue(p)).ToList();

注意‌:需处理反射性能开销和空值7。

‌4. 性能对比‌

方法适用场景性能 可读性
LINQ链式调用简单多属性排序中等★★★★★
自定义IComparer高频或复杂排序★★★☆☆
反射动态排序 字段不确定时★★☆☆☆

5. 示例类定义‌


class Person {public string Name { get; set; }public int Age { get; set; }public int Score { get; set; }
}

相关文章:

  • 数学建模,机器决策人建模
  • 空调系统虚拟标定技术:新能源汽车能效优化的革命性突破
  • IntelliJ IDEA 接入 DeepSeek帮助你更好编码
  • 目标检测:YOLO 模型详解
  • VLM-MPC:自动驾驶中模型预测控制器增强视觉-语言模型
  • 新美业门店模式vs传统美业门店模式 调研报告
  • PHP学习笔记(八)
  • 【 Redis | 实战篇 扩展 】
  • 用户栈的高效解析逻辑
  • EtherNet/IP机柜内解决方案在医疗控制中心智能化的应用潜能和方向分析
  • springMVC拦截器,拦截器拦截策略设置
  • 【动手学深度学习】系列
  • ShenNiusModularity项目源码学习(27:ShenNius.Admin.Mvc项目分析-12)
  • ABC 355
  • DeepSeek的走红,会不会带动芯片市场新一轮增长?
  • AI知识库- Cherry Studio构建本地知识库
  • 元宇宙中的虚拟经济:机遇与挑战
  • STM32F103_LL库+寄存器学习笔记12.2 - 串口DMA高效收发实战2:进一步提高串口接收的效率
  • C++ 空间配置器
  • 【周输入】517周阅读推荐-1
  • 怎样做网站平台赚钱/西安seo哪家好
  • 咋做个人网站/中国职业培训在线平台
  • 程序员找工作网站/深圳产品网络推广
  • 网站建设犭金手指B排名14/南昌seo实用技巧
  • 装修公司企业网站开发规划/百度快照是什么
  • 燕郊个人网站建设/重庆网站seo搜索引擎优化