Лучший способ сортировки массива в порядке убывания
У меня есть массив int, который я должен сортировать по убыванию.
Так как я не нашел никакого метода сортировки массива в порядке убывания. В настоящее время я сортирую массив в порядке убывания, как показано ниже
int[] array = new int[] { 3, 1, 4, 5, 2 };
Array.Sort<int>( array );
Array.Reverse( array );
Теперь вопрос в том, что. Есть ли лучший способ сделать то же самое в С#?
Ответы
Ответ 1
В зависимости от порядка сортировки вы можете сделать это:
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 просто меняются на противоположные.
Ответ 2
Используйте метод LINQ OrderByDescending
. Он возвращает IOrderedIEnumerable<int>
, который вы можете преобразовать обратно в Array, если вам это нужно. Как правило, List<>
более функциональны, чем Array
s.
array = array.OrderByDescending(c => c).ToArray();
Ответ 3
Конечно, вы можете настроить сортировку.
Вам нужно предоставить делегату Sort() делегат методу сравнения, который он будет использовать для сортировки.
Использование анонимного метода:
Array.Sort<int>( array,
delegate(int a, int b)
{
return b - a; //Normal compare is a-b
});
Подробнее об этом:
Сортировка массивов
MSDN - метод Array.Sort(T [], сравнение)
Ответ 4
Да, вы можете передать предикат для сортировки. Это будет ваша обратная реализация.
Ответ 5
Вы можете указать компаратор (реализация IComparer) в качестве параметра в Array.Sort, порядок сортировки фактически зависит от компаратора. Компоновщик по умолчанию используется при сортировке по возрастанию
Ответ 6
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);
}
}