[英]How sort array in ascending order but put 0 at last?
排序數組的方式是,排序數組的成員以升序開始,但o值最后出現在c#中
ulong[] arr = new ulong[30];
arr[0]=13325647855656;
arr[1]=65897426666332;
arr[2]=00685956265661;
arr[4]=0;
然后輸出必須是
arr[0]=00685956265661;
arr[1]=13325647855656;
arr[2]=65897426666332;
arr[4]=0;
您可以使用Linq
OrderBy
和ThenBy
ulong[] arr = new ulong[30];
arr[0] = 13325647855656;
arr[1] = 65897426666332;
arr[2] = 00685956265661;
arr[4] = 0;
var results = arr.OrderBy(x => x == 0).ThenBy(x => x);
您可以將Array.Sort
與此自定義比較委托一起使用 :
Array.Sort(arr, (u1, u2) =>
{
if (u1 == 0 && u2 == 0) return 0;
else if (u1 == 0) return ulong.MaxValue.CompareTo(u2);
else if (u2 == 0) return u1.CompareTo(ulong.MaxValue);
else return u1.CompareTo(u2);
});
如果要使用Linq( ToArray()
需要在內部創建一個附加數組),我將使用:
arr = arr.OrderBy(x => x == 0).ThenBy(x => x).ToArray();
class ZeroIsBigComparer : System.Collections.Generic.IComparer<ulong>
{
public int Compare(ulong x, ulong y)
{
if (x == y) return 0;
if (x == 0) return 1;
if (y == 0) return -1;
return x.CompareTo(y);
}
}
然后
var comparer = new ZeroIsBigComparer();
arr = arr.OrderBy(x => x, comparer).ToArray();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.