gpt4 book ai didi

c# - Null首先在数组C#中排序

转载 作者:行者123 更新时间:2023-11-30 19:38:06 24 4
gpt4 key购买 nike

我在网上找不到任何东西,所以任何帮助将不胜感激。在我的待办事项列表应用程序中,我有一个 14 个元素大的数组。当任何元素添加到数组时,我使用 Array.Sort,然后打印数组的所有元素。但是,数组首先按空单元格排序。

例如,如果将“Programming is hard”添加到单元格 0,然后 array.sort,用于打印数组的方法会将字符串放入单元格 13,导致待办事项列表看起来很奇怪。

那么,如何使用 Array.Sort 方法将空单元格放在最后?

最佳答案

您正在寻找采用比较器函数的 Array.Sort() 的重载。

Array.Sort(arr, (a, b) => a == null ? 1 : b == null ? -1 : a.CompareTo(b));

查看 IComparer<T>.Compare(T,T) 的文档对于你传入的这个函数应该返回什么的期望。

当您使用 Array.Sort(Array) 时, 排序调用默认比较器,对于 string s 恰好首先对空值进行排序。 Array.Sort<T>(T[], Comparer<T>)允许您自定义比较行为。

我们传入的 lambda,(a, b) => a == null ? 1 : b == null ? -1 : a.CompareTo(b)) ,遵循这条路径:

  1. 如果a == null , 返回大于 1 因为我们的比较认为 null比什么都少,
  2. 否则如果b == null , 返回小于 1 因为我们的比较认为 null比什么都少,
  3. 否则,遵从 string 的默认比较实现..

或者,如果您只是不想处理空值,请考虑将它们过滤掉:

arr.Where(s => s != null); 

或者用一些合理的值替换它们,

arr.Select(s => s == null ? "Invalid task" : s); 

视您的需要而定。

关于c# - Null首先在数组C#中排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35097154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com