Null首先在数组C#中排序

Squ*_*Gun 2 c# arrays sorting

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

例如,如果向单元格0添加"Programming is hard",那么array.sort,用于打印数组的方法将把字符串放入单元格13,导致todo列表看起来很奇怪.

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

jdp*_*nix 5

您正在寻找带有比较器功能的Array.Sort()的重载.

Array.Sort(arr, (a, b) => a == null ? 1 : b == null ? -1 : a.CompareTo(b));
Run Code Online (Sandbox Code Playgroud)

请查看文档,IComparer<T>.Compare(T,T)了解您传递的函数应该返回的期望.

使用时Array.Sort(Array),sort会调用默认的比较器,对于strings,首先会对null值进行排序.将Array.Sort<T>(T[], Comparer<T>)允许您自定义的比较行为.

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

  1. 如果a == null,因为我们的比较认为null比任何东西都少,返回大于1 ,
  2. 否则,如果b == null我们的比较认为null比任何东西都少,则返回少于1 ,
  3. 否则,请遵循默认的比较实现string..

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

arr.Where(s => s != null); 
Run Code Online (Sandbox Code Playgroud)

或用一些合理的价值取代它们,

arr.Select(s => s == null ? "Invalid task" : s); 
Run Code Online (Sandbox Code Playgroud)

视您的需要而定.

  • 只是一个观察...如果OP不明白问题中数组发生了什么,这个答案的例子就是让OP的头部爆炸.而且我们不希望看到任何大脑溅到这里. (2认同)