如何使用Lambda对List<类>按转换后的数值字段排序?
按数值字段与常量差值的绝对值排序对象列表
我们有一个包含自定义类实例的列表,类中存在一个数值类型字段,需要按照该字段值与指定常量差值的绝对值对列表进行排序。
实现升序排序
使用LINQ的OrderBy方法,将排序逻辑指定为字段与常量差值的绝对值:
// 假设自定义类为MyClass,目标数值字段为a,指定常量为10 var sortedAscList = myList.OrderBy(item => Math.Abs(item.a - 10)).ToList();
实现降序排序
如果需要按差值绝对值从大到小排序,使用OrderByDescending:
var sortedDescList = myList.OrderByDescending(item => Math.Abs(item.a - 10)).ToList();
示例说明
假设列表中有两个实例:
myList[0].a = 3; myList[1].a = 7;
排序时会计算每个实例的绝对值差值:
Math.Abs(3 - 10) = 7Math.Abs(7 - 10) = 3
按升序排序后,列表顺序会变为myList[1](差值3)在前,myList[0](差值7)在后。
补充:找出差值最小的元素
如果只是需要找到差值绝对值最小的元素(而非排序整个列表),在.NET 6及以上版本可以直接用MinBy:
var minDiffItem = myList.MinBy(item => Math.Abs(item.a - 10));
也可以通过排序后取第一个元素实现:
var minDiffItem = myList.OrderBy(item => Math.Abs(item.a - 10)).First();
内容的提问来源于stack exchange,提问作者Kujivunia
相关产品推荐
相关产品推荐

