J'ai un tableau d'int qui je dois trier par ordre décroissant.
Puisque je n'ai trouvé aucune méthode pour trier le tableau dans l'ordre décroissant. Actuellement, je trie le tableau dans l'ordre décroissant comme suit
int[] array = new int[] { 3, 1, 4, 5, 2 };
Array.Sort<int>( array );
Array.Reverse( array );
Maintenant, la question est que. Existe-t-il une meilleure façon de faire la même chose en c #?
En fonction de l'ordre de tri, vous pouvez procéder comme suit:
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 simplement inversés.
Utilisez la méthode LINQ OrderByDescending
. Il renvoie IOrderedIEnumerable<int>
, que vous pouvez reconvertir en tableau si vous en avez besoin. Généralement, List<>
s sont plus fonctionnels que Array
s.
array = array.OrderByDescending(c => c).ToArray();
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)
Oui, vous pouvez passer le prédicat à trier. Ce serait votre mise en œuvre inverse.
Vous pouvez spécifier un comparateur (implémentation IComparer) en tant que paramètre dans Array.Sort, l'ordre de tri dépend en réalité du comparateur. Le comparateur par défaut est utilisé dans le tri croissant
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);
}
}