我在网上找不到任何东西,所以任何帮助都将不胜感激.在我的待办事项列表应用程序中,我有一个14个元素大的数组.当任何元素添加到数组时,我使用Array.Sort,然后打印数组的所有元素.但是,数组首先使用空单元格进行排序.
例如,如果向单元格0添加"Programming is hard",那么array.sort,用于打印数组的方法将把字符串放入单元格13,导致todo列表看起来很奇怪.
那么,你如何使用Array.Sort方法将空单元格放在最后?
您正在寻找带有比较器功能的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))遵循以下路径:
a == null,因为我们的比较认为null比任何东西都少,返回大于1 ,b == null我们的比较认为null比任何东西都少,则返回少于1 ,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)
视您的需要而定.