簡體   English   中英

按降序對數組進行排序的更好方法

[英]Better way to sort array in descending order

我有一個 int 數組,我必須按降序對其進行排序。

由於我沒有找到任何按降序對數組進行排序的方法。目前我正在按降序對數組進行排序,如下所示

int[] array = new int[] { 3, 1, 4, 5, 2 };
Array.Sort<int>( array );
Array.Reverse( array );

現在,問題是。有沒有更好的方法在 c# 中做同樣的事情?

使用 LINQ OrderByDescending方法。 它返回IOrderedIEnumerable<int> ,如果需要,您可以將其轉換回 Array。 通常, List<>Array更實用。

array = array.OrderByDescending(c => c).ToArray();

根據排序順序,您可以執行以下操作:

    int[] array = new int[] { 3, 1, 4, 5, 2 };
    Array.Sort<int>(array,
                    new Comparison<int>(
                            (i1, i2) => i2.CompareTo(i1)
                    ));

... 或這個 :

    int[] array = new int[] { 3, 1, 4, 5, 2 };
    Array.Sort<int>(array,
                    new Comparison<int>(
                            (i1, i2) => i1.CompareTo(i2)
                    ));

i1 和 i2 只是顛倒了。

當然,您可以自定義排序。

您需要將 Sort() 委托給一個比較方法,它將用於排序。

使用匿名方法:

Array.Sort<int>( array,
delegate(int a, int b)
  {
    return b - a; //Normal compare is a-b
  }); 

閱讀更多相關信息:

排序數組
MSDN - Array.Sort 方法(T[],比較)

對於降序就地排序:

int[] numbers = { 1, 2, 3 };
Array.Sort(numbers, (a, b) => b.CompareTo(a));

對於異地排序(不更改輸入數組):

int[] numbers = { 1, 2, 3 };
var sortedNumbers = numbers.OrderByDescending(x => x).ToArray();

是的,您可以通過謂詞進行排序。 那將是您的反向實現。

你可以在 Array.Sort 中指定一個 comparer(IComparer implementation) 作為參數,排序的順序實際上取決於 comparer。 默認比較器用於升序排序

class Program
{
    private static int[] table;

    static void Main(string[] args)
    {
        int[] ints = new int[] { 6, 2, 5, 99, 55 };

       table = ints.OrderByDescending(x => x).ToArray();

        foreach (var item in table)
        {
            Console.WriteLine(item);
        }

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM