-1

ソートされた配列のメンバーが昇順で始まるように配列をソートしますが、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;
4

3 に答える 3

7

あなたが使用することができ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);
于 2013-02-22T08:03:38.413 に答える
5

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();
于 2013-02-22T08:02:43.080 に答える
0
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();
于 2013-02-22T08:06:15.030 に答える