web-dev-qa-db-ja.com

配列を降順に並べ替えるより良い方法

降順で並べ替える必要があるintの配列があります。

配列を降順で並べ替える方法が見つからなかったため、現在は以下のように配列を降順で並べています

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

今、問題はそれです。c#で同じことをするより良い方法はありますか?

49
santosh singh

ソート順に応じて、これを行うことができます。

    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は逆になっています。

55
JYL

LINQ OrderByDescendingメソッドを使用します。 IOrderedIEnumerable<int>を返します。必要に応じて、配列に戻すことができます。一般的に、List<>sはArraysよりも機能的です。

array = array.OrderByDescending(c => c).ToArray();
61
Ilya Smagin

もちろん、ソートをカスタマイズできます。

Sort()に、ソートに使用する比較メソッドのデリゲートを与える必要があります。

匿名メソッドを使用する:

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

それについてもっと読む:

配列の並べ替え
MSDN-Array.Sortメソッド(T []、比較)

9
Yochai Timmer

はい、ソートするために述語を渡すことができます。それはあなたの逆の実装でしょう。

2
Sasha Reminnyi

Array.Sortのパラメーターとしてcomparer(IComparerの実装)を指定できます。ソートの順序は実際にはcomparerに依存します。昇順ソートではデフォルトの比較演算子が使用されます

2
Tony Kh
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);
        }

    }
0
Błażej