web-dev-qa-db-fra.com

Meilleure façon de trier un tableau dans l'ordre décroissant

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 #?

48
santosh singh

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.

55
JYL

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 Arrays.

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

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)

9
Yochai Timmer

Oui, vous pouvez passer le prédicat à trier. Ce serait votre mise en œuvre inverse.

2
Sasha Reminnyi

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

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