降順で並べ替える必要があるintの配列があります。
配列を降順で並べ替える方法が見つからなかったため、現在は以下のように配列を降順で並べています
int[] array = new int[] { 3, 1, 4, 5, 2 };
Array.Sort<int>( array );
Array.Reverse( array );
今、問題はそれです。c#で同じことをするより良い方法はありますか?
ソート順に応じて、これを行うことができます。
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は逆になっています。
LINQ OrderByDescending
メソッドを使用します。 IOrderedIEnumerable<int>
を返します。必要に応じて、配列に戻すことができます。一般的に、List<>
sはArray
sよりも機能的です。
array = array.OrderByDescending(c => c).ToArray();
もちろん、ソートをカスタマイズできます。
Sort()に、ソートに使用する比較メソッドのデリゲートを与える必要があります。
匿名メソッドを使用する:
Array.Sort<int>( array,
delegate(int a, int b)
{
return b - a; //Normal compare is a-b
});
それについてもっと読む:
はい、ソートするために述語を渡すことができます。それはあなたの逆の実装でしょう。
Array.Sortのパラメーターとしてcomparer(IComparerの実装)を指定できます。ソートの順序は実際には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);
}
}