73 votes

Meilleure façon de trier le tableau par ordre décroissant

J'ai un tableau d'int que je dois trier par ordre décroissant.

Comme je n'ai trouvé aucune méthode pour trier le tableau par ordre décroissant. Actuellement, je trie le tableau par ordre décroissant comme ci-dessous

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

Maintenant, la question est la suivante. Existe-t-il une meilleure façon de faire la même chose en c# ?

78voto

Ilya Smagin Points 1833

Utilisez la méthode OrderByDescending Il renvoie IOrderedIEnumerable<int> , que vous pouvez reconvertir en Array si vous en avez besoin. Généralement, les List<> s sont plus fonctionnels que les Array s.

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

75voto

JYL Points 1652

Selon l'ordre de tri, vous pouvez faire ceci :

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

... ou ca :

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

i1 et i2 sont juste inversés.

12voto

Yochai Timmer Points 19802

Bien sûr, vous pouvez personnaliser le tri.

Vous devez donner à Sort() un délégué à une méthode de comparaison qu'il utilisera pour trier.

En utilisant une méthode anonyme :

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

En savoir plus à ce sujet :

Tableaux de tri MSDN - Méthode Array.Sort (T[], Comparaison)

12voto

Alex Aza Points 29204

Pour le tri sur place par ordre décroissant :

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

Pour le tri hors de propos (aucune modification du tableau d'entrée) :

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

2voto

LexRema Points 1755

Oui, vous pouvez passer un prédicat à trier. Ce serait votre implémentation inversée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X