You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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) = 7
  • Math.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 13:36:04