Assembly : mscorlib (dans mscorlib.dll)
SyntaxePublic Sub Sort ( _ index As Integer, _ count As Integer, _ comparer As IComparer(Of T) _ )
Dim instance As List(Of T) Dim index As Integer Dim count As Integer Dim comparer As IComparer(Of T) instance.Sort(index, count, comparer)
public void Sort ( int index, int count, IComparer<T> comparer )
public: void Sort ( int index, int count, IComparer<T>^ comparer )
public void Sort ( int index, int count, IComparer<T> comparer )
public function Sort ( index : int, count : int, comparer : IComparer<T> )
Paramètres
- index
Index de début de base zéro de la plage à trier.
- count
Longueur de la plage à trier.
- comparer
Implémentation IComparer à utiliser lors de la comparaison d'éléments, ou référence Null (Nothing en Visual Basic) pour utiliser le comparateur par défaut Comparer.Default.
Exceptions| Type d'exception | Condition |
|---|---|
| index est inférieur à 0. - ou - count est inférieur à 0. | |
| index et count ne spécifient pas une plage valide dans List. - ou - L'implémentation de comparer a provoqué une erreur pendant le tri. Par exemple, comparer peut ne pas retourner 0 lors de la comparaison d'un élément à lui-même. | |
| comparer est référence Null (Nothing en Visual Basic), et le comparateur par défaut Comparer.Default ne peut pas trouver une implémentation de l'interface générique IComparable ou de l'interface IComparable pour le type T. |
NotesSi comparer est fourni, les éléments de List sont triés à l'aide de l'implémentation IComparer spécifiée.
Si comparer est référence Null (Nothing en Visual Basic), le comparateur Comparer.Default par défaut vérifie si le type T implémente l'interface générique IComparable et utilise cette implémentation, si elle est disponible. Sinon, Comparer.Default vérifie si le type T implémente l'interface IComparable. Si le type T n'implémente aucune des interfaces, Comparer.Default lève InvalidOperationException.
Cette méthode utilise System.Array.Sort, qui se sert de l'algorithme QuickSort. Cette implémentation effectue un tri instable ; autrement dit, lorsque deux éléments sont égaux, leur ordre risque de ne pas être respecté. En revanche, une opération de tri stable ne modifie pas l'ordre d'éléments égaux.
En moyenne, cette méthode est une opération O(n log n) où n est Count ; dans le pire des cas, c'est une opération O(n ^ 2).
ExempleL'exemple de code suivant illustre les surcharges de méthodes Sort(Int32,Int32,IComparer, générique) et BinarySearch(Int32,Int32,T,IComparer, générique).
Pour les chaînes nommées DinoCompare, l'exemple de code définit un autre comparateur, qui implémente l'interface générique IComparer<string> (IComparer(Of String) en Visual Basic, IComparer<String^> en Visual C++). Le comparateur fonctionne comme suit : en premier lieu, les comparateurs sont testés pour la valeur référence Null (Nothing en Visual Basic) 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 plus longue chaîne est jugée supérieure. Troisièmement, si les longueurs sont égales, la comparaison de chaînes ordinaire est utilisée.
Un List de chaînes est créé et rempli avec les noms de cinq dinosaures herbivores et de trois dinosaures carnivores. Dans chacun des deux groupes, les noms ne sont pas dans un ordre de tri particulier. La liste s'affiche, la plage d'herbivores est triée à l'aide de l'autre comparateur, et la liste s'affiche de nouveau.
La surcharge de méthode BinarySearch(Int32,Int32,T,IComparer, générique) est ensuite utilisée pour rechercher uniquement la plage d'herbivores correspondant à "Brachiosaure". La chaîne n'est pas trouvée, et le complément de bits (l'opérateur ~ de C# et de Visual C++, Xor-1 en Visual Basic) du nombre négatif retourné par la méthode BinarySearch(Int32,Int32,T,IComparer, générique) est utilisé comme index pour insérer la nouvelle chaîne.
Imports System Imports System.Collections.Generic Public Class DinoComparer Implements IComparer(Of String) Public Function Compare(ByVal x As String, _ ByVal y As String) As Integer _ Implements IComparer(Of String).Compare If x Is Nothing Then If y Is Nothing Then ' If x is Nothing and y is Nothing, they're ' equal. Return 0 Else ' If x is Nothing and y is not Nothing, y ' is greater. Return -1 End If Else ' If x is not Nothing... ' If y Is Nothing Then ' ...and y is Nothing, x is greater. Return 1 Else ' ...and y is not Nothing, compare the ' lengths of the two strings. ' Dim retval As Integer = _ x.Length.CompareTo(y.Length) If retval <> 0 Then ' 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) End If End If End If End Function End Class Public Class Example Public Shared Sub Main() Dim dinosaurs As New List(Of String) dinosaurs.Add("Pachycephalosaurus") dinosaurs.Add("Parasauralophus") dinosaurs.Add("Amargasaurus") dinosaurs.Add("Galimimus") dinosaurs.Add("Mamenchisaurus") dinosaurs.Add("Deinonychus") dinosaurs.Add("Oviraptor") dinosaurs.Add("Tyrannosaurus") Dim herbivores As Integer = 5 Display(dinosaurs) Dim dc As New DinoComparer Console.WriteLine(vbLf & _ "Sort a range with the alternate comparer:") dinosaurs.Sort(0, herbivores, dc) Display(dinosaurs) Console.WriteLine(vbLf & _ "BinarySearch a range and Insert ""{0}"":", _ "Brachiosaurus") Dim index As Integer = _ dinosaurs.BinarySearch(0, herbivores, "Brachiosaurus", dc) If index < 0 Then index = index Xor -1 dinosaurs.Insert(index, "Brachiosaurus") herbivores += 1 End If Display(dinosaurs) End Sub Private Shared Sub Display(ByVal lis As List(Of String)) Console.WriteLine() For Each s As String In lis Console.WriteLine(s) Next End Sub End Class ' This code example produces the following output: ' 'Pachycephalosaurus 'Parasauralophus 'Amargasaurus 'Galimimus 'Mamenchisaurus 'Deinonychus 'Oviraptor 'Tyrannosaurus ' 'Sort a range with the alternate comparer: ' 'Galimimus 'Amargasaurus 'Mamenchisaurus 'Parasauralophus 'Pachycephalosaurus 'Deinonychus 'Oviraptor 'Tyrannosaurus ' 'BinarySearch a range and Insert "Brachiosaurus": ' 'Galimimus 'Amargasaurus 'Brachiosaurus 'Mamenchisaurus 'Parasauralophus 'Pachycephalosaurus 'Deinonychus 'Oviraptor 'Tyrannosaurus
using System; using System.Collections.Generic; public class DinoComparer: IComparer<string> { public int Compare(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 class Example { public static void Main() { List<string> dinosaurs = new List<string>(); dinosaurs.Add("Pachycephalosaurus"); dinosaurs.Add("Parasauralophus"); dinosaurs.Add("Amargasaurus"); dinosaurs.Add("Galimimus"); dinosaurs.Add("Mamenchisaurus"); dinosaurs.Add("Deinonychus"); dinosaurs.Add("Oviraptor"); dinosaurs.Add("Tyrannosaurus"); int herbivores = 5; Display(dinosaurs); DinoComparer dc = new DinoComparer(); Console.WriteLine("\nSort a range with the alternate comparer:"); dinosaurs.Sort(0, herbivores, dc); Display(dinosaurs); Console.WriteLine("\nBinarySearch a range and Insert \"{0}\":", "Brachiosaurus"); int index = dinosaurs.BinarySearch(0, herbivores, "Brachiosaurus", dc); if (index < 0) { dinosaurs.Insert(~index, "Brachiosaurus"); herbivores++; } Display(dinosaurs); } private static void Display(List<string> list) { Console.WriteLine(); foreach( string s in list ) { Console.WriteLine(s); } } } /* This code example produces the following output: Pachycephalosaurus Parasauralophus Amargasaurus Galimimus Mamenchisaurus Deinonychus Oviraptor Tyrannosaurus Sort a range with the alternate comparer: Galimimus Amargasaurus Mamenchisaurus Parasauralophus Pachycephalosaurus Deinonychus Oviraptor Tyrannosaurus BinarySearch a range and Insert "Brachiosaurus": Galimimus Amargasaurus Brachiosaurus Mamenchisaurus Parasauralophus Pachycephalosaurus Deinonychus Oviraptor Tyrannosaurus */
using namespace System; using namespace System::Collections::Generic; public ref class DinoComparer: IComparer<String^> { public: virtual int Compare(String^ x, String^ y) { if (x == nullptr) { if (y == nullptr) { // 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 == nullptr) // ...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); } } } } }; void Display(List<String^>^ list) { Console::WriteLine(); for each(String^ s in list) { Console::WriteLine(s); } }; void main() { List<String^>^ dinosaurs = gcnew List<String^>(); dinosaurs->Add("Pachycephalosaurus"); dinosaurs->Add("Parasauralophus"); dinosaurs->Add("Amargasaurus"); dinosaurs->Add("Galimimus"); dinosaurs->Add("Mamenchisaurus"); dinosaurs->Add("Deinonychus"); dinosaurs->Add("Oviraptor"); dinosaurs->Add("Tyrannosaurus"); int herbivores = 5; Display(dinosaurs); DinoComparer^ dc = gcnew DinoComparer(); Console::WriteLine("\nSort a range with the alternate comparer:"); dinosaurs->Sort(0, herbivores, dc); Display(dinosaurs); Console::WriteLine("\nBinarySearch a range and Insert \"{0}\":", "Brachiosaurus"); int index = dinosaurs->BinarySearch(0, herbivores, "Brachiosaurus", dc); if (index < 0) { dinosaurs->Insert(~index, "Brachiosaurus"); herbivores++; } Display(dinosaurs); } /* This code example produces the following output: Pachycephalosaurus Parasauralophus Amargasaurus Galimimus Mamenchisaurus Deinonychus Oviraptor Tyrannosaurus Sort a range with the alternate comparer: Galimimus Amargasaurus Mamenchisaurus Parasauralophus Pachycephalosaurus Deinonychus Oviraptor Tyrannosaurus BinarySearch a range and Insert "Brachiosaurus": Galimimus Amargasaurus Brachiosaurus Mamenchisaurus Parasauralophus Pachycephalosaurus Deinonychus Oviraptor Tyrannosaurus */
Plates-formesWindows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition
Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.
Informations de version
Outils (masquer)
S'enregistrer
Liste des Membres
Qui est en ligne?
FAQ