Lire en anglais

Partager via


Array.Sort Méthode

Définition

Trie les éléments dans un tableau unidimensionnel.

Surcharges

Sort(Array, Array, Int32, Int32, IComparer)

Trie une plage d’éléments dans une paire d’objets Array unidimensionnels (l’un contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide du IComparerspécifié.

Sort(Array, Int32, Int32, IComparer)

Trie les éléments d’une plage d’éléments dans une Array unidimensionnelle à l’aide du IComparerspécifié.

Sort(Array, Array, Int32, Int32)

Trie une plage d’éléments dans une paire d’objets Array unidimensionnels (l’un contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide de l’implémentation IComparable de chaque clé.

Sort(Array, Int32, Int32)

Trie les éléments dans une plage d’éléments d’un Array unidimensionnel à l’aide de l’implémentation IComparable de chaque élément du Array.

Sort(Array, Array, IComparer)

Trie une paire d’objets Array unidimensionnels (l’un contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide du IComparerspécifié.

Sort(Array, Array)

Trie une paire d’objets Array unidimensionnels (l’un contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide de l’implémentation IComparable de chaque clé.

Sort(Array)

Trie les éléments dans une Array unidimensionnelle entière à l’aide de l’implémentation IComparable de chaque élément du Array.

Sort(Array, IComparer)

Trie les éléments dans un Array unidimensionnel à l’aide du IComparerspécifié.

Sort<T>(T[])

Trie les éléments d’une Array entière à l’aide de l’implémentation d’interface générique IComparable<T> de chaque élément du Array.

Sort<T>(T[], IComparer<T>)

Trie les éléments d’un Array à l’aide de l’interface générique IComparer<T> spécifiée.

Sort<T>(T[], Comparison<T>)

Trie les éléments d’un Array à l’aide du Comparison<T>spécifié.

Sort<T>(T[], Int32, Int32)

Trie les éléments d’une plage d’éléments d’un Array à l’aide de l’implémentation d’interface générique IComparable<T> de chaque élément du Array.

Sort<T>(T[], Int32, Int32, IComparer<T>)

Trie les éléments dans une plage d’éléments d’un Array à l’aide de l’interface générique IComparer<T> spécifiée.

Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>)

Trie une plage d’éléments dans une paire d’objets Array (l’une contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide de l’interface générique IComparer<T> spécifiée.

Sort<TKey,TValue>(TKey[], TValue[])

Trie une paire d’objets Array (l’un contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide de l’implémentation d’interface générique IComparable<T> de chaque clé.

Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>)

Trie une paire d’objets Array (l’un contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide de l’interface générique IComparer<T> spécifiée.

Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32)

Trie une plage d’éléments dans une paire d’objets Array (l’un contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide de l’implémentation d’interface générique IComparable<T> de chaque clé.

Sort(Array, Array, Int32, Int32, IComparer)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie une plage d’éléments dans une paire d’objets Array unidimensionnels (l’un contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide du IComparerspécifié.

public static void Sort (Array keys, Array items, int index, int length, System.Collections.IComparer comparer);
public static void Sort (Array keys, Array? items, int index, int length, System.Collections.IComparer? comparer);

Paramètres

keys
Array

Array unidimensionnel qui contient les clés à trier.

items
Array

L'Array unidimensionnel qui contient les éléments qui correspondent à chacune des clés du keysArray.

-ou-

null trier uniquement les keysArray.

index
Int32

Index de départ de la plage à trier.

length
Int32

Nombre d’éléments de la plage à trier.

comparer
IComparer

Implémentation IComparer à utiliser lors de la comparaison d’éléments.

-ou-

null utiliser l’implémentation IComparable de chaque élément.

Exceptions

keys est null.

Le keysArray est multidimensionnel.

-ou-

Le itemsArray est multidimensionnel.

index est inférieur à la limite inférieure de keys.

-ou-

length est inférieur à zéro.

items n’est pas null, et la limite inférieure de keys ne correspond pas à la limite inférieure de items.

-ou-

items n’est pas null, et la longueur de keys est supérieure à la longueur de items.

-ou-

index et length ne spécifient pas de plage valide dans la keysArray.

-ou-

items n’est pas null, et index et length ne spécifient pas de plage valide dans la itemsArray.

-ou-

L’implémentation de comparer a provoqué une erreur pendant le tri. Par exemple, comparer risque de ne pas retourner 0 lors de la comparaison d’un élément avec lui-même.

comparer est null, et un ou plusieurs éléments de l'keysArray n’implémentent pas l’interface IComparable.

Exemples

L’exemple de code suivant montre comment trier deux tableaux associés où le premier tableau contient les clés et le deuxième tableau contient les valeurs. Les tris sont effectués à l’aide du comparateur par défaut et d’un comparateur personnalisé qui inverse l’ordre de tri. Notez que le résultat peut varier en fonction de la CultureInfoactuelle.

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }
   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myKeys = { "red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange" };
      String[] myValues = { "strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myKeys, myValues, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myKeys, myValues );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );
   }

   public static void PrintKeysAndValues( String[] myKeys, String[] myValues )  {
      for ( int i = 0; i < myKeys.Length; i++ )  {
         Console.WriteLine( "   {0,-10}: {1}", myKeys[i], myValues[i] );
      }
      Console.WriteLine();
   }
}


/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

Remarques

Chaque clé du keysArray a un élément correspondant dans le itemsArray. Lorsqu’une clé est repositionnée pendant le tri, l’élément correspondant dans la itemsArray est repositionné de la même façon. Par conséquent, la itemsArray est triée en fonction de l’arrangement des clés correspondantes dans le keysArray.

Si comparer est null, chaque clé dans la plage d’éléments spécifiée dans l'keysArray doit implémenter l’interface IComparable pour être capable de comparaisons avec toutes les autres clés.

Vous pouvez trier s’il y a plus d’éléments que de clés, mais les éléments qui n’ont aucune clé correspondante ne seront pas triés. Vous ne pouvez pas trier s’il y a plus de clés que d’éléments ; cela lève une ArgumentException.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

.NET inclut des implémentations de IComparer prédéfinies répertoriées dans le tableau suivant.

Implémentation Description
System.Collections.CaseInsensitiveComparer Compare deux objets, mais effectue une comparaison sans respect de la casse des chaînes.
Comparer.Default Compare deux objets à l’aide des conventions de tri de la culture actuelle.
Comparer.DefaultInvariant Compare deux objets à l’aide des conventions de tri de la culture invariante.
Comparer<T>.Default Compare deux objets de type T à l’aide de l’ordre de tri par défaut du type.

Vous pouvez également prendre en charge les comparaisons personnalisées en fournissant une instance de votre propre implémentation de IComparer au paramètre comparer. L’exemple le fait en définissant une implémentation de IComparer personnalisée qui inverse l’ordre de tri par défaut et effectue une comparaison de chaînes sans respect de la casse.

Cette méthode utilise l’algorithme de tri introspectif () d’introduction comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est length.

Notes pour les appelants

.NET Framework 4 et versions antérieures utilisent uniquement l’algorithme Quicksort. Quicksort identifie les comparateurs non valides dans certaines situations où l’opération de tri lève une exception IndexOutOfRangeException et lève une exception ArgumentException à l’appelant. À compter de .NET Framework 4.5, il est possible que les opérations de tri qui ont précédemment levées ArgumentException ne lèvent pas d’exception, car les algorithmes de tri d’insertion et de tassort ne détectent pas de comparateur non valide. Dans la plupart des cas, cela s’applique aux tableaux dont le nombre est inférieur ou égal à 16 éléments.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort(Array, Int32, Int32, IComparer)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie les éléments d’une plage d’éléments dans une Array unidimensionnelle à l’aide du IComparerspécifié.

public static void Sort (Array array, int index, int length, System.Collections.IComparer comparer);
public static void Sort (Array array, int index, int length, System.Collections.IComparer? comparer);

Paramètres

array
Array

Le Array unidimensionnel à trier.

index
Int32

Index de départ de la plage à trier.

length
Int32

Nombre d’éléments de la plage à trier.

comparer
IComparer

Implémentation IComparer à utiliser lors de la comparaison d’éléments.

-ou-

null utiliser l’implémentation IComparable de chaque élément.

Exceptions

array est null.

array est multidimensionnel.

index est inférieur à la limite inférieure de array.

-ou-

length est inférieur à zéro.

index et length ne spécifient pas de plage valide dans array.

-ou-

L’implémentation de comparer a provoqué une erreur pendant le tri. Par exemple, comparer risque de ne pas retourner 0 lors de la comparaison d’un élément avec lui-même.

comparer est null, et un ou plusieurs éléments de array n’implémentent pas l’interface IComparable.

Exemples

L’exemple de code suivant montre comment trier les valeurs dans un Array à l’aide du comparateur par défaut et d’un comparateur personnalisé qui inverse l’ordre de tri. Notez que le résultat peut varier en fonction de la CultureInfoactuelle.

using System;
using System.Collections;

public class ReverseComparer : IComparer
{
   // Call CaseInsensitiveComparer.Compare with the parameters reversed.
   public int Compare(Object x, Object y)
   {
       return (new CaseInsensitiveComparer()).Compare(y, x );
   }
}

public class Example
{
   public static void Main()
   {
      // Create and initialize a new array.
      String[] words = { "The", "QUICK", "BROWN", "FOX", "jumps",
                         "over", "the", "lazy", "dog" };
      // Instantiate the reverse comparer.
      IComparer revComparer = new ReverseComparer();

      // Display the values of the array.
      Console.WriteLine( "The original order of elements in the array:" );
      DisplayValues(words);

      // Sort a section of the array using the default comparer.
      Array.Sort(words, 1, 3);
      Console.WriteLine( "After sorting elements 1-3 by using the default comparer:");
      DisplayValues(words);

      // Sort a section of the array using the reverse case-insensitive comparer.
      Array.Sort(words, 1, 3, revComparer);
      Console.WriteLine( "After sorting elements 1-3 by using the reverse case-insensitive comparer:");
      DisplayValues(words);

      // Sort the entire array using the default comparer.
      Array.Sort(words);
      Console.WriteLine( "After sorting the entire array by using the default comparer:");
      DisplayValues(words);

      // Sort the entire array by using the reverse case-insensitive comparer.
      Array.Sort(words, revComparer);
      Console.WriteLine( "After sorting the entire array using the reverse case-insensitive comparer:");
      DisplayValues(words);
   }

   public static void DisplayValues(String[] arr)
   {
      for ( int i = arr.GetLowerBound(0); i <= arr.GetUpperBound(0);
            i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, arr[i] );
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    The original order of elements in the array:
//       [0] : The
//       [1] : QUICK
//       [2] : BROWN
//       [3] : FOX
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the default comparer:
//       [0] : The
//       [1] : BROWN
//       [2] : FOX
//       [3] : QUICK
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the reverse case-insensitive comparer:
//       [0] : The
//       [1] : QUICK
//       [2] : FOX
//       [3] : BROWN
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting the entire array by using the default comparer:
//       [0] : BROWN
//       [1] : dog
//       [2] : FOX
//       [3] : jumps
//       [4] : lazy
//       [5] : over
//       [6] : QUICK
//       [7] : the
//       [8] : The
//
//    After sorting the entire array using the reverse case-insensitive comparer:
//       [0] : the
//       [1] : The
//       [2] : QUICK
//       [3] : over
//       [4] : lazy
//       [5] : jumps
//       [6] : FOX
//       [7] : dog
//       [8] : BROWN

Remarques

Si comparer est null, chaque élément de la plage spécifiée d’éléments dans array doit implémenter l’interface IComparable pour pouvoir effectuer des comparaisons avec tous les autres éléments de array.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

.NET inclut des implémentations de IComparer prédéfinies répertoriées dans le tableau suivant.

Implémentation Description
System.Collections.CaseInsensitiveComparer Compare deux objets, mais effectue une comparaison sans respect de la casse des chaînes.
Comparer.Default Compare deux objets à l’aide des conventions de tri de la culture actuelle.
Comparer.DefaultInvariant Compare deux objets à l’aide des conventions de tri de la culture invariante.
Comparer<T>.Default Compare deux objets de type T à l’aide de l’ordre de tri par défaut du type.

Vous pouvez également prendre en charge les comparaisons personnalisées en fournissant une instance de votre propre implémentation de IComparer au paramètre comparer. L’exemple le fait en définissant une classe ReverseComparer qui inverse l’ordre de tri par défaut pour les instances d’un type et effectue une comparaison de chaînes sans respect de la casse.

Cette méthode utilise l’algorithme de tri introspectif () d’introduction comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est length.

Notes pour les appelants

.NET Framework 4 et versions antérieures utilisent uniquement l’algorithme Quicksort. Quicksort identifie les comparateurs non valides dans certaines situations où l’opération de tri lève une exception IndexOutOfRangeException et lève une exception ArgumentException à l’appelant. À compter de .NET Framework 4.5, il est possible que les opérations de tri qui ont précédemment levées ArgumentException ne lèvent pas d’exception, car les algorithmes de tri d’insertion et de tassort ne détectent pas de comparateur non valide. Dans la plupart des cas, cela s’applique aux tableaux dont le nombre est inférieur ou égal à 16 éléments.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort(Array, Array, Int32, Int32)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie une plage d’éléments dans une paire d’objets Array unidimensionnels (l’un contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide de l’implémentation IComparable de chaque clé.

public static void Sort (Array keys, Array items, int index, int length);
public static void Sort (Array keys, Array? items, int index, int length);

Paramètres

keys
Array

Array unidimensionnel qui contient les clés à trier.

items
Array

L'Array unidimensionnel qui contient les éléments qui correspondent à chacune des clés du keysArray.

-ou-

null trier uniquement les keysArray.

index
Int32

Index de départ de la plage à trier.

length
Int32

Nombre d’éléments de la plage à trier.

Exceptions

keys est null.

Le keysArray est multidimensionnel.

-ou-

Le itemsArray est multidimensionnel.

index est inférieur à la limite inférieure de keys.

-ou-

length est inférieur à zéro.

items n’est pas null, et la longueur de keys est supérieure à la longueur de items.

-ou-

index et length ne spécifient pas de plage valide dans la keysArray.

-ou-

items n’est pas null, et index et length ne spécifient pas de plage valide dans la itemsArray.

Un ou plusieurs éléments de l'keysArray n’implémentent pas l’interface IComparable.

Exemples

L’exemple de code suivant montre comment trier deux tableaux associés où le premier tableau contient les clés et le deuxième tableau contient les valeurs. Les tris sont effectués à l’aide du comparateur par défaut et d’un comparateur personnalisé qui inverse l’ordre de tri. Notez que le résultat peut varier en fonction de la CultureInfoactuelle.

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }
   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myKeys = { "red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange" };
      String[] myValues = { "strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myKeys, myValues, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myKeys, myValues );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );
   }

   public static void PrintKeysAndValues( String[] myKeys, String[] myValues )  {
      for ( int i = 0; i < myKeys.Length; i++ )  {
         Console.WriteLine( "   {0,-10}: {1}", myKeys[i], myValues[i] );
      }
      Console.WriteLine();
   }
}


/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

Remarques

Chaque clé du keysArray a un élément correspondant dans le itemsArray. Lorsqu’une clé est repositionnée pendant le tri, l’élément correspondant dans la itemsArray est repositionné de la même façon. Par conséquent, la itemsArray est triée en fonction de l’arrangement des clés correspondantes dans le keysArray.

Chaque clé dans la plage d’éléments spécifiée dans l'keysArray doit implémenter l’interface IComparable pour être capable de comparaisons avec toutes les autres clés.

Vous pouvez trier s’il y a plus d’éléments que de clés, mais les éléments qui n’ont aucune clé correspondante ne seront pas triés. Vous ne pouvez pas trier s’il y a plus de clés que d’éléments ; cela lève une ArgumentException.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

Cette méthode utilise l’algorithme de tri introspectif () d’introduction comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est length.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort(Array, Int32, Int32)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie les éléments dans une plage d’éléments d’un Array unidimensionnel à l’aide de l’implémentation IComparable de chaque élément du Array.

public static void Sort (Array array, int index, int length);

Paramètres

array
Array

Le Array unidimensionnel à trier.

index
Int32

Index de départ de la plage à trier.

length
Int32

Nombre d’éléments de la plage à trier.

Exceptions

array est null.

array est multidimensionnel.

index est inférieur à la limite inférieure de array.

-ou-

length est inférieur à zéro.

index et length ne spécifient pas de plage valide dans array.

Un ou plusieurs éléments de array n’implémentent pas l’interface IComparable.

Exemples

L’exemple de code suivant montre comment trier les valeurs dans un Array à l’aide du comparateur par défaut et d’un comparateur personnalisé qui inverse l’ordre de tri. Notez que le résultat peut varier en fonction de la CultureInfoactuelle.

using System;
using System.Collections;

public class ReverseComparer : IComparer
{
   // Call CaseInsensitiveComparer.Compare with the parameters reversed.
   public int Compare(Object x, Object y)
   {
       return (new CaseInsensitiveComparer()).Compare(y, x );
   }
}

public class Example
{
   public static void Main()
   {
      // Create and initialize a new array.
      String[] words = { "The", "QUICK", "BROWN", "FOX", "jumps",
                         "over", "the", "lazy", "dog" };
      // Instantiate the reverse comparer.
      IComparer revComparer = new ReverseComparer();

      // Display the values of the array.
      Console.WriteLine( "The original order of elements in the array:" );
      DisplayValues(words);

      // Sort a section of the array using the default comparer.
      Array.Sort(words, 1, 3);
      Console.WriteLine( "After sorting elements 1-3 by using the default comparer:");
      DisplayValues(words);

      // Sort a section of the array using the reverse case-insensitive comparer.
      Array.Sort(words, 1, 3, revComparer);
      Console.WriteLine( "After sorting elements 1-3 by using the reverse case-insensitive comparer:");
      DisplayValues(words);

      // Sort the entire array using the default comparer.
      Array.Sort(words);
      Console.WriteLine( "After sorting the entire array by using the default comparer:");
      DisplayValues(words);

      // Sort the entire array by using the reverse case-insensitive comparer.
      Array.Sort(words, revComparer);
      Console.WriteLine( "After sorting the entire array using the reverse case-insensitive comparer:");
      DisplayValues(words);
   }

   public static void DisplayValues(String[] arr)
   {
      for ( int i = arr.GetLowerBound(0); i <= arr.GetUpperBound(0);
            i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, arr[i] );
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    The original order of elements in the array:
//       [0] : The
//       [1] : QUICK
//       [2] : BROWN
//       [3] : FOX
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the default comparer:
//       [0] : The
//       [1] : BROWN
//       [2] : FOX
//       [3] : QUICK
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the reverse case-insensitive comparer:
//       [0] : The
//       [1] : QUICK
//       [2] : FOX
//       [3] : BROWN
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting the entire array by using the default comparer:
//       [0] : BROWN
//       [1] : dog
//       [2] : FOX
//       [3] : jumps
//       [4] : lazy
//       [5] : over
//       [6] : QUICK
//       [7] : the
//       [8] : The
//
//    After sorting the entire array using the reverse case-insensitive comparer:
//       [0] : the
//       [1] : The
//       [2] : QUICK
//       [3] : over
//       [4] : lazy
//       [5] : jumps
//       [6] : FOX
//       [7] : dog
//       [8] : BROWN

Remarques

Chaque élément dans la plage d’éléments spécifiée dans array doit implémenter l’interface IComparable pour être capable de comparaisons avec tous les autres éléments de array.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

Cette méthode utilise l’algorithme de tri introspectif () d’introduction comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est length.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort(Array, Array, IComparer)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie une paire d’objets Array unidimensionnels (l’un contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide du IComparerspécifié.

public static void Sort (Array keys, Array items, System.Collections.IComparer comparer);
public static void Sort (Array keys, Array? items, System.Collections.IComparer? comparer);

Paramètres

keys
Array

Array unidimensionnel qui contient les clés à trier.

items
Array

L'Array unidimensionnel qui contient les éléments qui correspondent à chacune des clés du keysArray.

-ou-

null trier uniquement les keysArray.

comparer
IComparer

Implémentation IComparer à utiliser lors de la comparaison d’éléments.

-ou-

null utiliser l’implémentation IComparable de chaque élément.

Exceptions

keys est null.

Le keysArray est multidimensionnel.

-ou-

Le itemsArray est multidimensionnel.

items n’est pas null, et la longueur de keys est supérieure à la longueur de items.

-ou-

L’implémentation de comparer a provoqué une erreur pendant le tri. Par exemple, comparer risque de ne pas retourner 0 lors de la comparaison d’un élément avec lui-même.

comparer est null, et un ou plusieurs éléments de l'keysArray n’implémentent pas l’interface IComparable.

Exemples

L’exemple suivant montre comment trier deux tableaux associés où le premier tableau contient les clés et le deuxième tableau contient les valeurs. Les tris sont effectués à l’aide du comparateur par défaut et d’un comparateur personnalisé qui inverse l’ordre de tri. Notez que le résultat peut varier en fonction de la CultureInfoactuelle.

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }
   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myKeys = { "red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange" };
      String[] myValues = { "strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myKeys, myValues, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myKeys, myValues );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );
   }

   public static void PrintKeysAndValues( String[] myKeys, String[] myValues )  {
      for ( int i = 0; i < myKeys.Length; i++ )  {
         Console.WriteLine( "   {0,-10}: {1}", myKeys[i], myValues[i] );
      }
      Console.WriteLine();
   }
}


/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

Remarques

Chaque clé du keysArray a un élément correspondant dans le itemsArray. Lorsqu’une clé est repositionnée pendant le tri, l’élément correspondant dans la itemsArray est repositionné de la même façon. Par conséquent, la itemsArray est triée en fonction de l’arrangement des clés correspondantes dans le keysArray.

Si comparer est null, chaque clé de l'keysArray doit implémenter l’interface IComparable pour être capable de comparaisons avec toutes les autres clés.

Vous pouvez trier s’il y a plus d’éléments que de clés, mais les éléments qui n’ont aucune clé correspondante ne seront pas triés. Vous ne pouvez pas trier s’il y a plus de clés que d’éléments ; cela lève une ArgumentException.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

.NET inclut des implémentations de IComparer prédéfinies répertoriées dans le tableau suivant.

Implémentation Description
System.Collections.CaseInsensitiveComparer Compare deux objets, mais effectue une comparaison sans respect de la casse des chaînes.
Comparer.Default Compare deux objets à l’aide des conventions de tri de la culture actuelle.
Comparer.DefaultInvariant Compare deux objets à l’aide des conventions de tri de la culture invariante.
Comparer<T>.Default Compare deux objets de type T à l’aide de l’ordre de tri par défaut du type.

Vous pouvez également prendre en charge les comparaisons personnalisées en fournissant une instance de votre propre implémentation de IComparer au paramètre comparer. L’exemple le fait en définissant une implémentation IComparer qui inverse l’ordre de tri par défaut et effectue une comparaison de chaînes sans respect de la casse.

Cette méthode utilise l’algorithme de tri introspectif () d’introduction comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est la Length de keys.

Notes pour les appelants

.NET Framework 4 et versions antérieures utilisent uniquement l’algorithme Quicksort. Quicksort identifie les comparateurs non valides dans certaines situations où l’opération de tri lève une exception IndexOutOfRangeException et lève une exception ArgumentException à l’appelant. À compter de .NET Framework 4.5, il est possible que les opérations de tri qui ont précédemment levées ArgumentException ne lèvent pas d’exception, car les algorithmes de tri d’insertion et de tassort ne détectent pas de comparateur non valide. Dans la plupart des cas, cela s’applique aux tableaux dont le nombre est inférieur ou égal à 16 éléments.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort(Array, Array)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie une paire d’objets Array unidimensionnels (l’un contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide de l’implémentation IComparable de chaque clé.

public static void Sort (Array keys, Array items);
public static void Sort (Array keys, Array? items);

Paramètres

keys
Array

Array unidimensionnel qui contient les clés à trier.

items
Array

L'Array unidimensionnel qui contient les éléments qui correspondent à chacune des clés du keysArray.

-ou-

null trier uniquement les keysArray.

Exceptions

keys est null.

Le keysArray est multidimensionnel.

-ou-

Le itemsArray est multidimensionnel.

items n’est pas null, et la longueur de keys est supérieure à la longueur de items.

Un ou plusieurs éléments de l'keysArray n’implémentent pas l’interface IComparable.

Exemples

L’exemple suivant montre comment trier deux tableaux associés où le premier tableau contient les clés et le deuxième tableau contient les valeurs. Les tris sont effectués à l’aide du comparateur par défaut et d’un comparateur personnalisé qui inverse l’ordre de tri. Notez que le résultat peut varier en fonction de la CultureInfoactuelle.

using System;
using System.Collections;

public class SamplesArray  {

   public class myReverserClass : IComparer  {

      // Calls CaseInsensitiveComparer.Compare with the parameters reversed.
      int IComparer.Compare( Object x, Object y )  {
          return( (new CaseInsensitiveComparer()).Compare( y, x ) );
      }
   }

   public static void Main()  {

      // Creates and initializes a new Array and a new custom comparer.
      String[] myKeys = { "red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange" };
      String[] myValues = { "strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe" };
      IComparer myComparer = new myReverserClass();

      // Displays the values of the Array.
      Console.WriteLine( "The Array initially contains the following values:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the default comparer.
      Array.Sort( myKeys, myValues, 1, 3 );
      Console.WriteLine( "After sorting a section of the Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts a section of the Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, 1, 3, myComparer );
      Console.WriteLine( "After sorting a section of the Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the default comparer.
      Array.Sort( myKeys, myValues );
      Console.WriteLine( "After sorting the entire Array using the default comparer:" );
      PrintKeysAndValues( myKeys, myValues );

      // Sorts the entire Array using the reverse case-insensitive comparer.
      Array.Sort( myKeys, myValues, myComparer );
      Console.WriteLine( "After sorting the entire Array using the reverse case-insensitive comparer:" );
      PrintKeysAndValues( myKeys, myValues );
   }

   public static void PrintKeysAndValues( String[] myKeys, String[] myValues )  {
      for ( int i = 0; i < myKeys.Length; i++ )  {
         Console.WriteLine( "   {0,-10}: {1}", myKeys[i], myValues[i] );
      }
      Console.WriteLine();
   }
}


/*
This code produces the following output.

The Array initially contains the following values:
   red       : strawberries
   GREEN     : PEARS
   YELLOW    : LIMES
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the default comparer:
   red       : strawberries
   BLUE      : BERRIES
   GREEN     : PEARS
   YELLOW    : LIMES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting a section of the Array using the reverse case-insensitive comparer:
   red       : strawberries
   YELLOW    : LIMES
   GREEN     : PEARS
   BLUE      : BERRIES
   purple    : grapes
   black     : olives
   orange    : cantaloupe

After sorting the entire Array using the default comparer:
   black     : olives
   BLUE      : BERRIES
   GREEN     : PEARS
   orange    : cantaloupe
   purple    : grapes
   red       : strawberries
   YELLOW    : LIMES

After sorting the entire Array using the reverse case-insensitive comparer:
   YELLOW    : LIMES
   red       : strawberries
   purple    : grapes
   orange    : cantaloupe
   GREEN     : PEARS
   BLUE      : BERRIES
   black     : olives

*/

Remarques

Chaque clé du keysArray a un élément correspondant dans le itemsArray. Lorsqu’une clé est repositionnée pendant le tri, l’élément correspondant dans la itemsArray est repositionné de la même façon. Par conséquent, la itemsArray est triée en fonction de l’arrangement des clés correspondantes dans le keysArray.

Chaque clé de la keysArray doit implémenter l’interface IComparable pour pouvoir effectuer des comparaisons avec toutes les autres clés.

Vous pouvez trier s’il y a plus d’éléments que de clés, mais les éléments qui n’ont aucune clé correspondante ne seront pas triés. Vous ne pouvez pas trier s’il y a plus de clés que d’éléments ; cela lève une ArgumentException.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

Cette méthode utilise l’algorithme de tri introspectif () d’introduction comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est la Length de keys.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort(Array)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie les éléments dans une Array unidimensionnelle entière à l’aide de l’implémentation IComparable de chaque élément du Array.

public static void Sort (Array array);

Paramètres

array
Array

Le Array unidimensionnel à trier.

Exceptions

array est null.

array est multidimensionnel.

Un ou plusieurs éléments de array n’implémentent pas l’interface IComparable.

Exemples

L’exemple de code suivant montre comment trier les valeurs dans un Array à l’aide du comparateur par défaut et d’un comparateur personnalisé qui inverse l’ordre de tri. Notez que le résultat peut varier en fonction de la CultureInfoactuelle.

using System;
using System.Collections;

public class ReverseComparer : IComparer
{
   // Call CaseInsensitiveComparer.Compare with the parameters reversed.
   public int Compare(Object x, Object y)
   {
       return (new CaseInsensitiveComparer()).Compare(y, x );
   }
}

public class Example
{
   public static void Main()
   {
      // Create and initialize a new array.
      String[] words = { "The", "QUICK", "BROWN", "FOX", "jumps",
                         "over", "the", "lazy", "dog" };
      // Instantiate the reverse comparer.
      IComparer revComparer = new ReverseComparer();

      // Display the values of the array.
      Console.WriteLine( "The original order of elements in the array:" );
      DisplayValues(words);

      // Sort a section of the array using the default comparer.
      Array.Sort(words, 1, 3);
      Console.WriteLine( "After sorting elements 1-3 by using the default comparer:");
      DisplayValues(words);

      // Sort a section of the array using the reverse case-insensitive comparer.
      Array.Sort(words, 1, 3, revComparer);
      Console.WriteLine( "After sorting elements 1-3 by using the reverse case-insensitive comparer:");
      DisplayValues(words);

      // Sort the entire array using the default comparer.
      Array.Sort(words);
      Console.WriteLine( "After sorting the entire array by using the default comparer:");
      DisplayValues(words);

      // Sort the entire array by using the reverse case-insensitive comparer.
      Array.Sort(words, revComparer);
      Console.WriteLine( "After sorting the entire array using the reverse case-insensitive comparer:");
      DisplayValues(words);
   }

   public static void DisplayValues(String[] arr)
   {
      for ( int i = arr.GetLowerBound(0); i <= arr.GetUpperBound(0);
            i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, arr[i] );
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    The original order of elements in the array:
//       [0] : The
//       [1] : QUICK
//       [2] : BROWN
//       [3] : FOX
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the default comparer:
//       [0] : The
//       [1] : BROWN
//       [2] : FOX
//       [3] : QUICK
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the reverse case-insensitive comparer:
//       [0] : The
//       [1] : QUICK
//       [2] : FOX
//       [3] : BROWN
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting the entire array by using the default comparer:
//       [0] : BROWN
//       [1] : dog
//       [2] : FOX
//       [3] : jumps
//       [4] : lazy
//       [5] : over
//       [6] : QUICK
//       [7] : the
//       [8] : The
//
//    After sorting the entire array using the reverse case-insensitive comparer:
//       [0] : the
//       [1] : The
//       [2] : QUICK
//       [3] : over
//       [4] : lazy
//       [5] : jumps
//       [6] : FOX
//       [7] : dog
//       [8] : BROWN

Remarques

Chaque élément de array doit implémenter l’interface de IComparable pour pouvoir effectuer des comparaisons avec tous les autres éléments de array.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

Cette méthode utilise l’algorithme de tri introspectif () d’introduction comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est la Length de array.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort(Array, IComparer)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie les éléments dans un Array unidimensionnel à l’aide du IComparerspécifié.

public static void Sort (Array array, System.Collections.IComparer comparer);
public static void Sort (Array array, System.Collections.IComparer? comparer);

Paramètres

array
Array

Tableau unidimensionnel à trier.

comparer
IComparer

Implémentation à utiliser lors de la comparaison d’éléments.

-ou-

null utiliser l’implémentation IComparable de chaque élément.

Exceptions

array est null.

array est multidimensionnel.

comparer est null, et un ou plusieurs éléments de array n’implémentent pas l’interface IComparable.

L’implémentation de comparer a provoqué une erreur pendant le tri. Par exemple, comparer risque de ne pas retourner 0 lors de la comparaison d’un élément avec lui-même.

Exemples

L’exemple suivant trie les valeurs dans un tableau de chaînes à l’aide du comparateur par défaut. Il définit également une implémentation de IComparer personnalisée nommée ReverseComparer qui inverse l’ordre de tri par défaut d’un objet lors de l’exécution d’une comparaison de chaînes sans respect de la casse. Notez que la sortie peut varier en fonction de la culture actuelle.

using System;
using System.Collections;

public class ReverseComparer : IComparer
{
   // Call CaseInsensitiveComparer.Compare with the parameters reversed.
   public int Compare(Object x, Object y)
   {
       return (new CaseInsensitiveComparer()).Compare(y, x );
   }
}

public class Example
{
   public static void Main()
   {
      // Create and initialize a new array.
      String[] words = { "The", "QUICK", "BROWN", "FOX", "jumps",
                         "over", "the", "lazy", "dog" };
      // Instantiate the reverse comparer.
      IComparer revComparer = new ReverseComparer();

      // Display the values of the array.
      Console.WriteLine( "The original order of elements in the array:" );
      DisplayValues(words);

      // Sort a section of the array using the default comparer.
      Array.Sort(words, 1, 3);
      Console.WriteLine( "After sorting elements 1-3 by using the default comparer:");
      DisplayValues(words);

      // Sort a section of the array using the reverse case-insensitive comparer.
      Array.Sort(words, 1, 3, revComparer);
      Console.WriteLine( "After sorting elements 1-3 by using the reverse case-insensitive comparer:");
      DisplayValues(words);

      // Sort the entire array using the default comparer.
      Array.Sort(words);
      Console.WriteLine( "After sorting the entire array by using the default comparer:");
      DisplayValues(words);

      // Sort the entire array by using the reverse case-insensitive comparer.
      Array.Sort(words, revComparer);
      Console.WriteLine( "After sorting the entire array using the reverse case-insensitive comparer:");
      DisplayValues(words);
   }

   public static void DisplayValues(String[] arr)
   {
      for ( int i = arr.GetLowerBound(0); i <= arr.GetUpperBound(0);
            i++ )  {
         Console.WriteLine( "   [{0}] : {1}", i, arr[i] );
      }
      Console.WriteLine();
   }
}
// The example displays the following output:
//    The original order of elements in the array:
//       [0] : The
//       [1] : QUICK
//       [2] : BROWN
//       [3] : FOX
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the default comparer:
//       [0] : The
//       [1] : BROWN
//       [2] : FOX
//       [3] : QUICK
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting elements 1-3 by using the reverse case-insensitive comparer:
//       [0] : The
//       [1] : QUICK
//       [2] : FOX
//       [3] : BROWN
//       [4] : jumps
//       [5] : over
//       [6] : the
//       [7] : lazy
//       [8] : dog
//
//    After sorting the entire array by using the default comparer:
//       [0] : BROWN
//       [1] : dog
//       [2] : FOX
//       [3] : jumps
//       [4] : lazy
//       [5] : over
//       [6] : QUICK
//       [7] : the
//       [8] : The
//
//    After sorting the entire array using the reverse case-insensitive comparer:
//       [0] : the
//       [1] : The
//       [2] : QUICK
//       [3] : over
//       [4] : lazy
//       [5] : jumps
//       [6] : FOX
//       [7] : dog
//       [8] : BROWN

Remarques

Si comparer est null, chaque élément de array doit implémenter l’interface IComparable pour pouvoir effectuer des comparaisons avec tous les autres éléments de array.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

Cette méthode utilise l’algorithme de tri introspectif () d’introduction comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est la Length de array.

.NET inclut des implémentations de IComparer prédéfinies répertoriées dans le tableau suivant.

Implémentation Description
System.Collections.CaseInsensitiveComparer Compare deux objets, mais effectue une comparaison sans respect de la casse des chaînes.
Comparer.Default Compare deux objets à l’aide des conventions de tri de la culture actuelle.
Comparer.DefaultInvariant Compare deux objets à l’aide des conventions de tri de la culture invariante.
Comparer<T>.Default Compare deux objets de type T à l’aide de l’ordre de tri par défaut du type.

Vous pouvez également prendre en charge les comparaisons personnalisées en fournissant une instance de votre propre implémentation de IComparer au paramètre comparer. L’exemple le fait en définissant une classe ReverseComparer qui inverse l’ordre de tri par défaut pour les instances d’un type et effectue une comparaison de chaînes sans respect de la casse.

Notes pour les appelants

.NET Framework 4 et versions antérieures utilisent uniquement l’algorithme Quicksort. Quicksort identifie les comparateurs non valides dans certaines situations où l’opération de tri lève une exception IndexOutOfRangeException et lève une exception ArgumentException à l’appelant. À compter de .NET Framework 4.5, il est possible que les opérations de tri qui ont précédemment levées ArgumentException ne lèvent pas d’exception, car les algorithmes de tri d’insertion et de tassort ne détectent pas de comparateur non valide. Dans la plupart des cas, cela s’applique aux tableaux dont le nombre est inférieur ou égal à 16 éléments.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<T>(T[])

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie les éléments d’une Array entière à l’aide de l’implémentation d’interface générique IComparable<T> de chaque élément du Array.

public static void Sort<T> (T[] array);

Paramètres de type

T

Type des éléments du tableau.

Paramètres

array
T[]

Le Array unidimensionnel basé sur zéro à trier.

Exceptions

array est null.

Un ou plusieurs éléments de array n’implémentent pas l’interface générique IComparable<T>.

Exemples

L’exemple de code suivant illustre la surcharge de méthode générique Sort<T>(T[]) et la surcharge de méthode générique BinarySearch<T>(T[], T). Un tableau de chaînes est créé, dans un ordre particulier.

Le tableau est affiché, trié et affiché à nouveau.

Notes

Les appels aux méthodes Sort et BinarySearch génériques n’ont pas d’apparence différente des appels à leurs équivalents non génériques, car Visual Basic, C# et C++ déduitnt le type du paramètre de type générique à partir du type du premier argument. Si vous utilisez le Ildasm.exe (désassembleur IL) pour examiner le langage MSIL (Microsoft Intermediate Language), vous pouvez voir que les méthodes génériques sont appelées.

La surcharge de méthode générique BinarySearch<T>(T[], T) est ensuite utilisée pour rechercher deux chaînes, une qui n’est pas dans le tableau et une autre. Le tableau et la valeur de retour de la méthode BinarySearch sont passés à la méthode générique ShowWhere, qui affiche la valeur d’index si la chaîne est trouvée, et sinon les éléments de la chaîne de recherche se situent entre eux s’il était dans le tableau. L’index est négatif si la chaîne n’est pas n le tableau. Par conséquent, la méthode ShowWhere prend le complément au niveau du bit (l’opérateur ~ en C# et Visual C++, Xor -1 en Visual Basic) pour obtenir l’index du premier élément de la liste qui est supérieur à la chaîne de recherche.

using System;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {"Pachycephalosaurus",
                              "Amargasaurus",
                              "Tyrannosaurus",
                              "Mamenchisaurus",
                              "Deinonychus",
                              "Edmontosaurus"};

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nSort");
        Array.Sort(dinosaurs);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nBinarySearch for 'Coelophysis':");
        int index = Array.BinarySearch(dinosaurs, "Coelophysis");
        ShowWhere(dinosaurs, index);

        Console.WriteLine("\nBinarySearch for 'Tyrannosaurus':");
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus");
        ShowWhere(dinosaurs, index);
    }

    private static void ShowWhere<T>(T[] array, int index)
    {
        if (index<0)
        {
            // If the index is negative, it represents the bitwise
            // complement of the next larger element in the array.
            //
            index = ~index;

            Console.Write("Not found. Sorts between: ");

            if (index == 0)
                Console.Write("beginning of array and ");
            else
                Console.Write("{0} and ", array[index-1]);

            if (index == array.Length)
                Console.WriteLine("end of array.");
            else
                Console.WriteLine("{0}.", array[index]);
        }
        else
        {
            Console.WriteLine("Found at index {0}.", index);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Tyrannosaurus
Mamenchisaurus
Deinonychus
Edmontosaurus

Sort

Amargasaurus
Deinonychus
Edmontosaurus
Mamenchisaurus
Pachycephalosaurus
Tyrannosaurus

BinarySearch for 'Coelophysis':
Not found. Sorts between: Amargasaurus and Deinonychus.

BinarySearch for 'Tyrannosaurus':
Found at index 5.
 */

Remarques

Chaque élément de array doit implémenter l’interface générique IComparable<T> pour pouvoir effectuer des comparaisons avec tous les autres éléments de array.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

Cette méthode utilise l’algorithme de tri introspectif () d’introduction comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est la Length de array.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<T>(T[], IComparer<T>)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie les éléments d’un Array à l’aide de l’interface générique IComparer<T> spécifiée.

public static void Sort<T> (T[] array, System.Collections.Generic.IComparer<T> comparer);
public static void Sort<T> (T[] array, System.Collections.Generic.IComparer<T>? comparer);

Paramètres de type

T

Type des éléments du tableau.

Paramètres

array
T[]

Le Array unidimensionnel de base zéro à trier.

comparer
IComparer<T>

Implémentation d’interface générique IComparer<T> à utiliser lors de la comparaison d’éléments, ou null pour utiliser l’implémentation d’interface générique IComparable<T> de chaque élément.

Exceptions

array est null.

comparer est null, et un ou plusieurs éléments de array n’implémentent pas l’interface générique IComparable<T>.

L’implémentation de comparer a provoqué une erreur pendant le tri. Par exemple, comparer risque de ne pas retourner 0 lors de la comparaison d’un élément avec lui-même.

Exemples

L’exemple de code suivant illustre la surcharge de méthode générique Sort<T>(T[], IComparer<T>) et la surcharge de méthode générique BinarySearch<T>(T[], T, IComparer<T>).

L’exemple de code définit un comparateur de remplacement pour les chaînes nommées ReverseCompare, qui implémente l'IComparer<string> (IComparer(Of String) en Visual Basic, IComparer<String^> dans l’interface générique Visual C++). Le comparateur appelle la méthode CompareTo(String), inversant l’ordre des comparands afin que les chaînes trient de haut en bas au lieu de basse à basse.

Le tableau est affiché, trié et affiché à nouveau. Les tableaux doivent être triés pour utiliser la méthode BinarySearch.

Notes

Les appels aux méthodes Sort<T>(T[], IComparer<T>) et BinarySearch<T>(T[], T, IComparer<T>) génériques n’ont pas d’apparence différente des appels à leurs équivalents non génériques, car Visual Basic, C# et C++ déduitnt le type du paramètre de type générique à partir du type du premier argument. Si vous utilisez le Ildasm.exe (désassembleur IL) pour examiner le langage MSIL (Microsoft Intermediate Language), vous pouvez voir que les méthodes génériques sont appelées.

La surcharge de méthode générique BinarySearch<T>(T[], T, IComparer<T>) est ensuite utilisée pour rechercher deux chaînes, une qui n’est pas dans le tableau et une autre. Le tableau et la valeur de retour de la méthode BinarySearch<T>(T[], T, IComparer<T>) sont passés à la méthode générique ShowWhere, qui affiche la valeur d’index si la chaîne est trouvée, et sinon les éléments de la chaîne de recherche se situent entre eux s’il était dans le tableau. L’index est négatif si la chaîne n’est pas n le tableau. Par conséquent, la méthode ShowWhere prend le complément au niveau du bit (l’opérateur ~ en C# et Visual C++, Xor -1 en Visual Basic) pour obtenir l’index du premier élément de la liste qui est supérieur à la chaîne de recherche.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {"Pachycephalosaurus",
                              "Amargasaurus",
                              "Tyrannosaurus",
                              "Mamenchisaurus",
                              "Deinonychus",
                              "Edmontosaurus"};

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort");
        Array.Sort(dinosaurs, rc);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nBinarySearch for 'Coelophysis':");
        int index = Array.BinarySearch(dinosaurs, "Coelophysis", rc);
        ShowWhere(dinosaurs, index);

        Console.WriteLine("\nBinarySearch for 'Tyrannosaurus':");
        index = Array.BinarySearch(dinosaurs, "Tyrannosaurus", rc);
        ShowWhere(dinosaurs, index);
    }

    private static void ShowWhere<T>(T[] array, int index)
    {
        if (index<0)
        {
            // If the index is negative, it represents the bitwise
            // complement of the next larger element in the array.
            //
            index = ~index;

            Console.Write("Not found. Sorts between: ");

            if (index == 0)
                Console.Write("beginning of array and ");
            else
                Console.Write("{0} and ", array[index-1]);

            if (index == array.Length)
                Console.WriteLine("end of array.");
            else
                Console.WriteLine("{0}.", array[index]);
        }
        else
        {
            Console.WriteLine("Found at index {0}.", index);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Tyrannosaurus
Mamenchisaurus
Deinonychus
Edmontosaurus

Sort

Tyrannosaurus
Pachycephalosaurus
Mamenchisaurus
Edmontosaurus
Deinonychus
Amargasaurus

BinarySearch for 'Coelophysis':
Not found. Sorts between: Deinonychus and Amargasaurus.

BinarySearch for 'Tyrannosaurus':
Found at index 0.
 */

Remarques

Si comparer est null, chaque élément de array doit implémenter l’interface générique IComparable<T> pour pouvoir effectuer des comparaisons avec tous les autres éléments de array.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

Cette méthode utilise l’algorithme de tri introspectif () d’introduction comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est la Length de array.

Notes pour les appelants

.NET Framework 4 et versions antérieures utilisent uniquement l’algorithme Quicksort. Quicksort identifie les comparateurs non valides dans certaines situations où l’opération de tri lève une exception IndexOutOfRangeException et lève une exception ArgumentException à l’appelant. À compter de .NET Framework 4.5, il est possible que les opérations de tri qui ont précédemment levées ArgumentException ne lèvent pas d’exception, car les algorithmes de tri d’insertion et de tassort ne détectent pas de comparateur non valide. Dans la plupart des cas, cela s’applique aux tableaux dont le nombre est inférieur ou égal à 16 éléments.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<T>(T[], Comparison<T>)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie les éléments d’un Array à l’aide du Comparison<T>spécifié.

public static void Sort<T> (T[] array, Comparison<T> comparison);

Paramètres de type

T

Type des éléments du tableau.

Paramètres

array
T[]

Le Array unidimensionnel basé sur zéro à trier.

comparison
Comparison<T>

La Comparison<T> à utiliser lors de la comparaison d’éléments.

Exceptions

array est null.

-ou-

comparison est null.

L’implémentation de comparison a provoqué une erreur pendant le tri. Par exemple, comparison risque de ne pas retourner 0 lors de la comparaison d’un élément avec lui-même.

Exemples

L’exemple de code suivant illustre la surcharge de méthode Sort(Comparison<T>).

L’exemple de code définit une autre méthode de comparaison pour les chaînes, nommée CompareDinosByLength. Cette méthode fonctionne comme suit : Tout d’abord, les comparands sont testés pournull, et une référence Null est traitée comme inférieure à une valeur non null. Deuxièmement, les longueurs de chaîne sont comparées, et la chaîne la plus longue est considérée comme plus grande. Troisièmement, si les longueurs sont égales, la comparaison de chaînes ordinaires est utilisée.

Un tableau de chaînes est créé et rempli avec quatre chaînes, sans ordre particulier. La liste inclut également une chaîne vide et une référence Null. La liste est affichée, triée à l’aide d’un délégué générique Comparison<T> représentant la méthode CompareDinosByLength et affichée à nouveau.

using System;
using System.Collections.Generic;

public class Example
{
    private static int CompareDinosByLength(string x, string y)
    {
        if (x == null)
        {
            if (y == null)
            {
                // If x is null and y is null, they're
                // equal.
                return 0;
            }
            else
            {
                // If x is null and y is not null, y
                // is greater.
                return -1;
            }
        }
        else
        {
            // If x is not null...
            //
            if (y == null)
                // ...and y is null, x is greater.
            {
                return 1;
            }
            else
            {
                // ...and y is not null, compare the
                // lengths of the two strings.
                //
                int retval = x.Length.CompareTo(y.Length);

                if (retval != 0)
                {
                    // If the strings are not of equal length,
                    // the longer string is greater.
                    //
                    return retval;
                }
                else
                {
                    // If the strings are of equal length,
                    // sort them with ordinary string comparison.
                    //
                    return x.CompareTo(y);
                }
            }
        }
    }

    public static void Main()
    {
        string[] dinosaurs = {
            "Pachycephalosaurus",
            "Amargasaurus",
            "",
            null,
            "Mamenchisaurus",
            "Deinonychus" };
        Display(dinosaurs);

        Console.WriteLine("\nSort with generic Comparison<string> delegate:");
        Array.Sort(dinosaurs, CompareDinosByLength);
        Display(dinosaurs);
    }

    private static void Display(string[] arr)
    {
        Console.WriteLine();
        foreach( string s in arr )
        {
            if (s == null)
                Console.WriteLine("(null)");
            else
                Console.WriteLine("\"{0}\"", s);
        }
    }
}

/* This code example produces the following output:

"Pachycephalosaurus"
"Amargasaurus"
""
(null)
"Mamenchisaurus"
"Deinonychus"

Sort with generic Comparison<string> delegate:

(null)
""
"Deinonychus"
"Amargasaurus"
"Mamenchisaurus"
"Pachycephalosaurus"
 */

Remarques

Si le tri n’est pas terminé, les résultats ne sont pas définis.

Cette méthode utilise l’algorithme de tri introspectif () comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est la Length de array.

Notes pour les appelants

.NET Framework 4 et versions antérieures utilisent uniquement l’algorithme Quicksort. Quicksort identifie les comparateurs non valides dans certaines situations où l’opération de tri lève une exception IndexOutOfRangeException et lève une exception ArgumentException à l’appelant. À compter de .NET Framework 4.5, il est possible que les opérations de tri qui ont précédemment levées ArgumentException ne lèvent pas d’exception, car les algorithmes de tri d’insertion et de tassort ne détectent pas de comparateur non valide. Dans la plupart des cas, cela s’applique aux tableaux dont le nombre est inférieur ou égal à 6 éléments.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<T>(T[], Int32, Int32)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie les éléments d’une plage d’éléments d’un Array à l’aide de l’implémentation d’interface générique IComparable<T> de chaque élément du Array.

public static void Sort<T> (T[] array, int index, int length);

Paramètres de type

T

Type des éléments du tableau.

Paramètres

array
T[]

Le Array unidimensionnel basé sur zéro à trier.

index
Int32

Index de départ de la plage à trier.

length
Int32

Nombre d’éléments de la plage à trier.

Exceptions

array est null.

index est inférieur à la limite inférieure de array.

-ou-

length est inférieur à zéro.

index et length ne spécifient pas de plage valide dans array.

Un ou plusieurs éléments de array n’implémentent pas l’interface générique IComparable<T>.

Exemples

L’exemple de code suivant illustre la surcharge de méthode générique Sort<T>(T[], Int32, Int32) et la surcharge de méthode générique Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) pour trier une plage dans un tableau.

L’exemple de code définit un comparateur de remplacement pour les chaînes nommées ReverseCompare, qui implémente l'IComparer<string> (IComparer(Of String) en Visual Basic, IComparer<String^> dans l’interface générique Visual C++). Le comparateur appelle la méthode CompareTo(String), inversant l’ordre des comparands afin que les chaînes trient de haut en bas au lieu de basse à basse.

L’exemple de code crée et affiche un tableau de noms de dinosaures, composé de trois herbivores suivis de trois carnivores (tyrannosaurids, pour être précis). La surcharge de méthode générique Sort<T>(T[], Int32, Int32) est utilisée pour trier les trois derniers éléments du tableau, qui sont ensuite affichés. La surcharge de méthode générique Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) est utilisée avec ReverseCompare pour trier les trois derniers éléments dans l’ordre inverse. Les dinosaures soigneusement confondus sont à nouveau affichés.

Notes

Les appels aux méthodes Sort<T>(T[], IComparer<T>) et BinarySearch<T>(T[], T, IComparer<T>) génériques n’ont pas d’apparence différente des appels à leurs équivalents non génériques, car Visual Basic, C# et C++ déduitnt le type du paramètre de type générique à partir du type du premier argument. Si vous utilisez le Ildasm.exe (désassembleur IL) pour examiner le langage MSIL (Microsoft Intermediate Language), vous pouvez voir que les méthodes génériques sont appelées.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {"Pachycephalosaurus",
                              "Amargasaurus",
                              "Mamenchisaurus",
                              "Tarbosaurus",
                              "Tyrannosaurus",
                              "Albertasaurus"};

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nSort(dinosaurs, 3, 3)");
        Array.Sort(dinosaurs, 3, 3);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort(dinosaurs, 3, 3, rc)");
        Array.Sort(dinosaurs, 3, 3, rc);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Tarbosaurus
Tyrannosaurus
Albertasaurus

Sort(dinosaurs, 3, 3)

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Albertasaurus
Tarbosaurus
Tyrannosaurus

Sort(dinosaurs, 3, 3, rc)

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Tyrannosaurus
Tarbosaurus
Albertasaurus
 */

Remarques

Chaque élément dans la plage spécifiée d’éléments dans array doit implémenter l’interface générique IComparable<T> pour pouvoir effectuer des comparaisons avec tous les autres éléments de array.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

Cette méthode utilise l’algorithme de tri introspectif () d’introduction comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est length.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<T>(T[], Int32, Int32, IComparer<T>)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie les éléments dans une plage d’éléments d’un Array à l’aide de l’interface générique IComparer<T> spécifiée.

public static void Sort<T> (T[] array, int index, int length, System.Collections.Generic.IComparer<T> comparer);
public static void Sort<T> (T[] array, int index, int length, System.Collections.Generic.IComparer<T>? comparer);

Paramètres de type

T

Type des éléments du tableau.

Paramètres

array
T[]

Le Array unidimensionnel basé sur zéro à trier.

index
Int32

Index de départ de la plage à trier.

length
Int32

Nombre d’éléments de la plage à trier.

comparer
IComparer<T>

Implémentation d’interface générique IComparer<T> à utiliser lors de la comparaison d’éléments, ou null pour utiliser l’implémentation d’interface générique IComparable<T> de chaque élément.

Exceptions

array est null.

index est inférieur à la limite inférieure de array.

-ou-

length est inférieur à zéro.

index et length ne spécifient pas de plage valide dans array.

-ou-

L’implémentation de comparer a provoqué une erreur pendant le tri. Par exemple, comparer risque de ne pas retourner 0 lors de la comparaison d’un élément avec lui-même.

comparer est null, et un ou plusieurs éléments de array n’implémentent pas l’interface générique IComparable<T>.

Exemples

L’exemple de code suivant illustre la surcharge de méthode générique Sort<T>(T[], Int32, Int32) et la surcharge de méthode générique Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) pour trier une plage dans un tableau.

L’exemple de code définit un comparateur de remplacement pour les chaînes nommées ReverseCompare, qui implémente l'IComparer<string> (IComparer(Of String) en Visual Basic, IComparer<String^> dans l’interface générique Visual C++). Le comparateur appelle la méthode CompareTo(String), inversant l’ordre des comparands afin que les chaînes trient de haut en bas au lieu de basse à basse.

L’exemple de code crée et affiche un tableau de noms de dinosaures, composé de trois herbivores suivis de trois carnivores (tyrannosaurids, pour être précis). La surcharge de méthode générique Sort<T>(T[], Int32, Int32) est utilisée pour trier les trois derniers éléments du tableau, qui sont ensuite affichés. La surcharge de méthode générique Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) est utilisée avec ReverseCompare pour trier les trois derniers éléments dans l’ordre inverse. Les dinosaures soigneusement confondus sont à nouveau affichés.

Notes

Les appels aux méthodes Sort<T>(T[], IComparer<T>) et BinarySearch<T>(T[], T, IComparer<T>) génériques n’ont pas d’apparence différente des appels à leurs équivalents non génériques, car Visual Basic, C# et C++ déduitnt le type du paramètre de type générique à partir du type du premier argument. Si vous utilisez le Ildasm.exe (désassembleur IL) pour examiner le langage MSIL (Microsoft Intermediate Language), vous pouvez voir que les méthodes génériques sont appelées.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {"Pachycephalosaurus",
                              "Amargasaurus",
                              "Mamenchisaurus",
                              "Tarbosaurus",
                              "Tyrannosaurus",
                              "Albertasaurus"};

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nSort(dinosaurs, 3, 3)");
        Array.Sort(dinosaurs, 3, 3);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort(dinosaurs, 3, 3, rc)");
        Array.Sort(dinosaurs, 3, 3, rc);

        Console.WriteLine();
        foreach( string dinosaur in dinosaurs )
        {
            Console.WriteLine(dinosaur);
        }
    }
}

/* This code example produces the following output:

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Tarbosaurus
Tyrannosaurus
Albertasaurus

Sort(dinosaurs, 3, 3)

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Albertasaurus
Tarbosaurus
Tyrannosaurus

Sort(dinosaurs, 3, 3, rc)

Pachycephalosaurus
Amargasaurus
Mamenchisaurus
Tyrannosaurus
Tarbosaurus
Albertasaurus
 */

Remarques

Si comparer est null, chaque élément dans la plage spécifiée d’éléments dans array doit implémenter l’interface générique IComparable<T> pour être capable de comparaisons avec tous les autres éléments de array.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

Cette méthode utilise l’algorithme de tri introspectif () d’introduction comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est length.

Notes pour les appelants

.NET Framework 4 et versions antérieures utilisent uniquement l’algorithme Quicksort. Quicksort identifie les comparateurs non valides dans certaines situations où l’opération de tri lève une exception IndexOutOfRangeException et lève une exception ArgumentException à l’appelant. À compter de .NET Framework 4.5, il est possible que les opérations de tri qui ont précédemment levées ArgumentException ne lèvent pas d’exception, car les algorithmes de tri d’insertion et de tassort ne détectent pas de comparateur non valide. Dans la plupart des cas, cela s’applique aux tableaux dont le nombre est inférieur ou égal à 16 éléments.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie une plage d’éléments dans une paire d’objets Array (l’une contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide de l’interface générique IComparer<T> spécifiée.

public static void Sort<TKey,TValue> (TKey[] keys, TValue[] items, int index, int length, System.Collections.Generic.IComparer<TKey> comparer);
public static void Sort<TKey,TValue> (TKey[] keys, TValue[]? items, int index, int length, System.Collections.Generic.IComparer<TKey>? comparer);

Paramètres de type

TKey

Type des éléments du tableau de clés.

TValue

Type des éléments du tableau d’éléments.

Paramètres

keys
TKey[]

Les Array unidimensionnels basés sur zéro qui contiennent les clés à trier.

items
TValue[]

L'Array unidimensionnel de base zéro qui contient les éléments qui correspondent aux clés de keys, ou null pour trier uniquement keys.

index
Int32

Index de départ de la plage à trier.

length
Int32

Nombre d’éléments de la plage à trier.

comparer
IComparer<TKey>

Implémentation d’interface générique IComparer<T> à utiliser lors de la comparaison d’éléments, ou null pour utiliser l’implémentation d’interface générique IComparable<T> de chaque élément.

Exceptions

keys est null.

index est inférieur à la limite inférieure de keys.

-ou-

length est inférieur à zéro.

items n’est pas null, et la limite inférieure de keys ne correspond pas à la limite inférieure de items.

-ou-

items n’est pas null, et la longueur de keys est supérieure à la longueur de items.

-ou-

index et length ne spécifient pas de plage valide dans la keysArray.

-ou-

items n’est pas null, et index et length ne spécifient pas de plage valide dans la itemsArray.

-ou-

L’implémentation de comparer a provoqué une erreur pendant le tri. Par exemple, comparer risque de ne pas retourner 0 lors de la comparaison d’un élément avec lui-même.

comparer est null, et un ou plusieurs éléments de l'keysArray n’implémentent pas l’interface générique IComparable<T>.

Exemples

L’exemple de code suivant illustre les surcharges Sort<TKey,TValue>(TKey[], TValue[]), Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>), Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32)et Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) de méthode générique, pour trier les paires de tableaux qui représentent des clés et des valeurs.

L’exemple de code définit un comparateur de remplacement pour les chaînes nommées ReverseCompare, qui implémente l'IComparer<string>(IComparer(Of String) en Visual Basic, IComparer<String^> dans l’interface générique Visual C++). Le comparateur appelle la méthode CompareTo(String), inversant l’ordre des comparands afin que les chaînes trient de haut en bas au lieu de basse à basse.

L’exemple de code crée et affiche un tableau de noms de dinosaures (les clés) et un tableau d’entiers représentant la longueur maximale de chaque dinosaure en mètres (les valeurs). Les tableaux sont ensuite triés et affichés plusieurs fois :

Notes

Les appels aux méthodes génériques ne sont pas différents des appels à leurs équivalents non génériques, car Visual Basic, C# et C++ déduitnt le type du paramètre de type générique du type des deux premiers arguments. Si vous utilisez le Ildasm.exe (désassembleur IL) pour examiner le langage MSIL (Microsoft Intermediate Language), vous pouvez voir que les méthodes génériques sont appelées.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

        int[] dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes)");
        Array.Sort(dinosaurs, dinosaurSizes);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

Remarques

Chaque clé du keysArray a un élément correspondant dans le itemsArray. Lorsqu’une clé est repositionnée pendant le tri, l’élément correspondant dans la itemsArray est repositionné de la même façon. Par conséquent, la itemsArray est triée en fonction de l’arrangement des clés correspondantes dans le keysArray.

Si comparer est null, chaque clé dans la plage d’éléments spécifiée dans l'keysArray doit implémenter l’interface générique IComparable<T> pour être capable de comparaisons avec toutes les autres clés.

Vous pouvez trier s’il y a plus d’éléments que de clés, mais les éléments qui n’ont aucune clé correspondante ne seront pas triés. Vous ne pouvez pas trier s’il y a plus de clés que d’éléments ; cela lève une ArgumentException.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

Cette méthode utilise l’algorithme de tri introspectif (introsort) comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est length.

Notes pour les appelants

.NET Framework 4 et versions antérieures utilisent uniquement l’algorithme Quicksort. Quicksort identifie les comparateurs non valides dans certaines situations où l’opération de tri lève une exception IndexOutOfRangeException et lève une exception ArgumentException à l’appelant. À compter de .NET Framework 4.5, il est possible que les opérations de tri qui ont précédemment levées ArgumentException ne lèvent pas d’exception, car les algorithmes de tri d’insertion et de tassort ne détectent pas de comparateur non valide. Dans la plupart des cas, cela s’applique aux tableaux dont le nombre est inférieur ou égal à 16 éléments.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<TKey,TValue>(TKey[], TValue[])

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie une paire d’objets Array (l’un contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide de l’implémentation d’interface générique IComparable<T> de chaque clé.

public static void Sort<TKey,TValue> (TKey[] keys, TValue[] items);
public static void Sort<TKey,TValue> (TKey[] keys, TValue[]? items);

Paramètres de type

TKey

Type des éléments du tableau de clés.

TValue

Type des éléments du tableau d’éléments.

Paramètres

keys
TKey[]

Les Array unidimensionnels basés sur zéro qui contiennent les clés à trier.

items
TValue[]

L'Array unidimensionnel de base zéro qui contient les éléments qui correspondent aux clés de keys, ou null pour trier uniquement keys.

Exceptions

keys est null.

items n’est pas null, et la limite inférieure de keys ne correspond pas à la limite inférieure de items.

-ou-

items n’est pas null, et la longueur de keys est supérieure à la longueur de items.

Un ou plusieurs éléments de l'keysArray n’implémentent pas l’interface générique IComparable<T>.

Exemples

L’exemple de code suivant illustre les surcharges Sort<TKey,TValue>(TKey[], TValue[]), Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>), Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32)et Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) de méthode générique, pour trier les paires de tableaux qui représentent des clés et des valeurs.

L’exemple de code définit un comparateur de remplacement pour les chaînes nommées ReverseCompare, qui implémente l'IComparer<string> (IComparer(Of String) en Visual Basic, IComparer<String^> dans l’interface générique Visual C++). Le comparateur appelle la méthode CompareTo(String), inversant l’ordre des comparands afin que les chaînes trient de haut en bas au lieu de basse à basse.

L’exemple de code crée et affiche un tableau de noms de dinosaures (les clés) et un tableau d’entiers représentant la longueur maximale de chaque dinosaure en mètres (les valeurs). Les tableaux sont ensuite triés et affichés plusieurs fois :

Notes

Les appels aux méthodes génériques ne sont pas différents des appels à leurs équivalents non génériques, car Visual Basic, C# et C++ déduitnt le type du paramètre de type générique du type des deux premiers arguments. Si vous utilisez le Ildasm.exe (désassembleur IL) pour examiner le langage MSIL (Microsoft Intermediate Language), vous pouvez voir que les méthodes génériques sont appelées.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

        int[] dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes)");
        Array.Sort(dinosaurs, dinosaurSizes);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

Remarques

Chaque clé du keysArray a un élément correspondant dans le itemsArray. Lorsqu’une clé est repositionnée pendant le tri, l’élément correspondant dans la itemsArray est repositionné de la même façon. Par conséquent, la itemsArray est triée en fonction de l’arrangement des clés correspondantes dans le keysArray.

Chaque clé de l'keysArray doit implémenter l’interface générique IComparable<T> pour pouvoir effectuer des comparaisons avec toutes les autres clés.

Vous pouvez trier s’il y a plus d’éléments que de clés, mais les éléments qui n’ont aucune clé correspondante ne seront pas triés. Vous ne pouvez pas trier s’il y a plus de clés que d’éléments ; cela lève une ArgumentException.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

Cette méthode utilise l’algorithme de tri introspectif () d’introduction comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un algorithme de tri d’insertion .

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est la Length de array.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie une paire d’objets Array (l’un contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide de l’interface générique IComparer<T> spécifiée.

public static void Sort<TKey,TValue> (TKey[] keys, TValue[] items, System.Collections.Generic.IComparer<TKey> comparer);
public static void Sort<TKey,TValue> (TKey[] keys, TValue[]? items, System.Collections.Generic.IComparer<TKey>? comparer);

Paramètres de type

TKey

Type des éléments du tableau de clés.

TValue

Type des éléments du tableau d’éléments.

Paramètres

keys
TKey[]

Les Array unidimensionnels basés sur zéro qui contiennent les clés à trier.

items
TValue[]

L'Array unidimensionnel de base zéro qui contient les éléments qui correspondent aux clés de keys, ou null pour trier uniquement keys.

comparer
IComparer<TKey>

Implémentation d’interface générique IComparer<T> à utiliser lors de la comparaison d’éléments, ou null pour utiliser l’implémentation d’interface générique IComparable<T> de chaque élément.

Exceptions

keys est null.

items n’est pas null, et la limite inférieure de keys ne correspond pas à la limite inférieure de items.

-ou-

items n’est pas null, et la longueur de keys est supérieure à la longueur de items.

-ou-

L’implémentation de comparer a provoqué une erreur pendant le tri. Par exemple, comparer risque de ne pas retourner 0 lors de la comparaison d’un élément avec lui-même.

comparer est null, et un ou plusieurs éléments de l'keysArray n’implémentent pas l’interface générique IComparable<T>.

Exemples

L’exemple de code suivant illustre les surcharges de Sort<TKey,TValue>(TKey[], TValue[]), [], Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>), Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32)et Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) surcharges de méthode générique, pour trier les paires de tableaux qui représentent des clés et des valeurs.

L’exemple de code définit un comparateur de remplacement pour les chaînes nommées ReverseCompare, qui implémente l'IComparer<string> (IComparer(Of String) en Visual Basic, IComparer<String^> dans l’interface générique Visual C++). Le comparateur appelle la méthode CompareTo(String), inversant l’ordre des comparands afin que les chaînes trient de haut en bas au lieu de basse à basse.

L’exemple de code crée et affiche un tableau de noms de dinosaures (les clés) et un tableau d’entiers représentant la longueur maximale de chaque dinosaure en mètres (les valeurs). Les tableaux sont ensuite triés et affichés plusieurs fois :

Notes

Les appels aux méthodes génériques ne sont pas différents des appels à leurs équivalents non génériques, car Visual Basic, C# et C++ déduitnt le type du paramètre de type générique du type des deux premiers arguments. Si vous utilisez le Ildasm.exe (désassembleur IL) pour examiner le langage MSIL (Microsoft Intermediate Language), vous pouvez voir que les méthodes génériques sont appelées.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

        int[] dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes)");
        Array.Sort(dinosaurs, dinosaurSizes);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

Remarques

Chaque clé du keysArray a un élément correspondant dans le itemsArray. Lorsqu’une clé est repositionnée pendant le tri, l’élément correspondant dans la itemsArray est repositionné de la même façon. Par conséquent, la itemsArray est triée en fonction de l’arrangement des clés correspondantes dans le keysArray.

Si comparer est null, chaque clé de l'keysArray doit implémenter l’interface générique IComparable<T> pour être capable de comparaisons avec toutes les autres clés.

Vous pouvez trier s’il y a plus d’éléments que de clés, mais les éléments qui n’ont aucune clé correspondante ne seront pas triés. Vous ne pouvez pas trier s’il y a plus de clés que d’éléments ; cela lève une ArgumentException.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

Cette méthode utilise l’algorithme de tri introspectif () d’introduction comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est la Length de array.

Notes pour les appelants

.NET Framework 4 et versions antérieures utilisent uniquement l’algorithme Quicksort. Quicksort identifie les comparateurs non valides dans certaines situations où l’opération de tri lève une exception IndexOutOfRangeException et lève une exception ArgumentException à l’appelant. À compter de .NET Framework 4.5, il est possible que les opérations de tri qui ont précédemment levées ArgumentException ne lèvent pas d’exception, car les algorithmes de tri d’insertion et de tassort ne détectent pas de comparateur non valide. Dans la plupart des cas, cela s’applique aux tableaux dont le nombre est inférieur ou égal à 16 éléments.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32)

Source:
Array.cs
Source:
Array.cs
Source:
Array.cs

Trie une plage d’éléments dans une paire d’objets Array (l’un contient les clés et l’autre contient les éléments correspondants) en fonction des clés du premier Array à l’aide de l’implémentation d’interface générique IComparable<T> de chaque clé.

public static void Sort<TKey,TValue> (TKey[] keys, TValue[] items, int index, int length);
public static void Sort<TKey,TValue> (TKey[] keys, TValue[]? items, int index, int length);

Paramètres de type

TKey

Type des éléments du tableau de clés.

TValue

Type des éléments du tableau d’éléments.

Paramètres

keys
TKey[]

Les Array unidimensionnels basés sur zéro qui contiennent les clés à trier.

items
TValue[]

L'Array unidimensionnel de base zéro qui contient les éléments qui correspondent aux clés de keys, ou null pour trier uniquement keys.

index
Int32

Index de départ de la plage à trier.

length
Int32

Nombre d’éléments de la plage à trier.

Exceptions

keys est null.

index est inférieur à la limite inférieure de keys.

-ou-

length est inférieur à zéro.

items n’est pas null, et la limite inférieure de keys ne correspond pas à la limite inférieure de items.

-ou-

items n’est pas null, et la longueur de keys est supérieure à la longueur de items.

-ou-

index et length ne spécifient pas de plage valide dans la keysArray.

-ou-

items n’est pas null, et index et length ne spécifient pas de plage valide dans la itemsArray.

Un ou plusieurs éléments de l'keysArray n’implémentent pas l’interface générique IComparable<T>.

Exemples

L’exemple de code suivant illustre les surcharges Sort<TKey,TValue>(TKey[], TValue[]), Sort<TKey,TValue>(TKey[], TValue[], IComparer<TKey>), Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32)et Sort<TKey,TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>) de méthode générique, pour trier les paires de tableaux qui représentent des clés et des valeurs.

L’exemple de code définit un comparateur de remplacement pour les chaînes nommées ReverseCompare, qui implémente l'IComparer<string> (IComparer(Of String) en Visual Basic, IComparer<String^> dans l’interface générique Visual C++). Le comparateur appelle la méthode CompareTo(String), inversant l’ordre des comparands afin que les chaînes trient de haut en bas au lieu de basse à basse.

L’exemple de code crée et affiche un tableau de noms de dinosaures (les clés) et un tableau d’entiers représentant la longueur maximale de chaque dinosaure en mètres (les valeurs). Les tableaux sont ensuite triés et affichés plusieurs fois :

Notes

Les appels aux méthodes génériques ne sont pas différents des appels à leurs équivalents non génériques, car Visual Basic, C# et C++ déduitnt le type du paramètre de type générique du type des deux premiers arguments. Si vous utilisez le Ildasm.exe (désassembleur IL) pour examiner le langage MSIL (Microsoft Intermediate Language), vous pouvez voir que les méthodes génériques sont appelées.

using System;
using System.Collections.Generic;

public class ReverseComparer: IComparer<string>
{
    public int Compare(string x, string y)
    {
        // Compare y and x in reverse order.
        return y.CompareTo(x);
    }
}

public class Example
{
    public static void Main()
    {
        string[] dinosaurs = {
            "Seismosaurus",
            "Chasmosaurus",
            "Coelophysis",
            "Mamenchisaurus",
            "Caudipteryx",
            "Cetiosaurus"  };

        int[] dinosaurSizes = { 40, 5, 3, 22, 1, 18 };

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes)");
        Array.Sort(dinosaurs, dinosaurSizes);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        ReverseComparer rc = new ReverseComparer();

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }

        Console.WriteLine("\nSort(dinosaurs, dinosaurSizes, 3, 3, rc)");
        Array.Sort(dinosaurs, dinosaurSizes, 3, 3, rc);

        Console.WriteLine();
        for (int i = 0; i < dinosaurs.Length; i++)
        {
            Console.WriteLine("{0}: up to {1} meters long.",
                dinosaurs[i], dinosaurSizes[i]);
        }
    }
}

/* This code example produces the following output:

Seismosaurus: up to 40 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.

Sort(dinosaurs, dinosaurSizes)

Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.
Coelophysis: up to 3 meters long.
Mamenchisaurus: up to 22 meters long.
Seismosaurus: up to 40 meters long.

Sort(dinosaurs, dinosaurSizes, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Caudipteryx: up to 1 meters long.
Cetiosaurus: up to 18 meters long.
Chasmosaurus: up to 5 meters long.

Sort(dinosaurs, dinosaurSizes, 3, 3, rc)

Seismosaurus: up to 40 meters long.
Mamenchisaurus: up to 22 meters long.
Coelophysis: up to 3 meters long.
Chasmosaurus: up to 5 meters long.
Cetiosaurus: up to 18 meters long.
Caudipteryx: up to 1 meters long.
 */

Remarques

Chaque clé du keysArray a un élément correspondant dans le itemsArray. Lorsqu’une clé est repositionnée pendant le tri, l’élément correspondant dans la itemsArray est repositionné de la même façon. Par conséquent, la itemsArray est triée en fonction de l’arrangement des clés correspondantes dans le keysArray.

Chaque clé dans la plage d’éléments spécifiée dans l'keysArray doit implémenter l’interface générique IComparable<T> pour être capable de comparaisons avec toutes les autres clés.

Vous pouvez trier s’il y a plus d’éléments que de clés, mais les éléments qui n’ont aucune clé correspondante ne seront pas triés. Vous ne pouvez pas trier s’il y a plus de clés que d’éléments ; cela lève une ArgumentException.

Si le tri n’est pas terminé, les résultats ne sont pas définis.

Cette méthode utilise l’algorithme de tri introspectif () d’introduction comme suit :

  • Si la taille de partition est inférieure ou égale à 16 éléments, elle utilise un 'algorithme de tri d’insertion.

  • Si le nombre de partitions dépasse 2 * LogN, où N est la plage du tableau d’entrée, il utilise un algorithme de Tassort.

  • Sinon, il utilise un algorithme Quicksort.

Cette implémentation effectue un tri instable ; autrement dit, si deux éléments sont égaux, leur ordre peut ne pas être conservé. En revanche, un tri stable conserve l’ordre des éléments qui sont égaux.

Cette méthode est une opération O(n journal n), où n est length.

Voir aussi

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0