c# - Lambda 如何按列表升序对元素重新排序并将空值放在后面?

标签 c# lambda

说我有 ListA={null,3,2,null}

ListA.OrderBy(x=>x.ID) //would return me null,null,2,3

如果我的目标是得到2,3,null,null,目前我只能想到把null item抽出来,手动pump到后面。

是否有一种干净的方法可以返回 2,3,null,null

最佳答案

您可以使用 OrderByDescending + ThenBy (假设它是一个 List<int?> ):

var orderedList = ListA
     .OrderByDescending(x => x.HasValue)
     .ThenBy(x => x);

x.HasValue返回 truefalse其中 true高于false .这就是我使用 OrderByDescending 的原因.

如果你想对原始列表进行排序,我会使用 List.Sort 自定义 Compaison<T>对待null作为最高值:

ListA.Sort((a1, a2) => (a1 ?? int.MaxValue).CompareTo(a2 ?? int.MaxValue));

这样效率更高,因为它不需要创建新列表。

关于c# - Lambda 如何按列表升序对元素重新排序并将空值放在后面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22142976/

相关文章:

java - 在 Java 8 中使用流、lambda

Java 8 : Filter an Array(NxM) to create a Map<String, 哈希集<字符串>>

c++ - C++ lambda 构造函数参数可以捕获构造变量吗?

C# 验证用户输入,如信用卡号

c# - Angular 6 - 单个表单组中的多个文件输入

c# - 与 Unity 2D 编辑器相比,玩家在构建过程中的移动速度要快得多

c++ - lambda 尾随返回类型 auto 的用法是什么?

c++ - 获取指向 lambda 的函数指针?

c# - IEnumerable<XAttribute> 返回 Null,需要返回属性值

c# - 客户端关闭时 NetworkStream 在 Read() 上抛出异常