Assembly : mscorlib (dans mscorlib.dll)
SyntaxePublic Sub Sort ( _ comparer As IComparer(Of T) _ )
Dim instance As List(Of T) Dim comparer As IComparer(Of T) instance.Sort(comparer)
public void Sort ( IComparer<T> comparer )
public: void Sort ( IComparer<T>^ comparer )
public void Sort ( IComparer<T> comparer )
public function Sort ( comparer : IComparer<T> )
Paramètres
- 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 |
|---|---|
| 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. | |
| 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. |
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(IComparer, générique) et BinarySearch(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 quatre chaînes, dans aucun ordre particulier. La liste est affichée, triée à l'aide de l'autre comparateur, puis affichée à nouveau.
La surcharge de méthode BinarySearch(T,IComparer, générique) est ensuite utilisée pour rechercher de nombreuses chaînes qui ne figurent pas dans la liste, par le biais de l'autre comparateur. La méthode Insert permet d'insérer les chaînes. Ces deux méthodes figurent dans la fonction nommée SearchAndInsert, avec le code pour prendre 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 BinarySearch(T,IComparer, générique) et l'utilisent 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("Amargasaurus") dinosaurs.Add("Mamenchisaurus") dinosaurs.Add("Deinonychus") Display(dinosaurs) Dim dc As New DinoComparer Console.WriteLine(vbLf & "Sort with alternate comparer:") dinosaurs.Sort(dc) Display(dinosaurs) SearchAndInsert(dinosaurs, "Coelophysis", dc) Display(dinosaurs) SearchAndInsert(dinosaurs, "Oviraptor", dc) Display(dinosaurs) SearchAndInsert(dinosaurs, "Tyrannosaur", dc) Display(dinosaurs) SearchAndInsert(dinosaurs, Nothing, dc) Display(dinosaurs) End Sub Private Shared Sub SearchAndInsert( _ ByVal lis As List(Of String), _ ByVal insert As String, ByVal dc As DinoComparer) Console.WriteLine(vbLf & _ "BinarySearch and Insert ""{0}"":", insert) Dim index As Integer = lis.BinarySearch(insert, dc) If index < 0 Then index = index Xor -1 lis.Insert(index, insert) End If 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 'Amargasaurus 'Mamenchisaurus 'Deinonychus ' 'Sort with alternate comparer: ' 'Deinonychus 'Amargasaurus 'Mamenchisaurus 'Pachycephalosaurus ' 'BinarySearch and Insert "Coelophysis": ' 'Coelophysis 'Deinonychus 'Amargasaurus 'Mamenchisaurus 'Pachycephalosaurus ' 'BinarySearch and Insert "Oviraptor": ' 'Oviraptor 'Coelophysis 'Deinonychus 'Amargasaurus 'Mamenchisaurus 'Pachycephalosaurus ' 'BinarySearch and Insert "Tyrannosaur": ' 'Oviraptor 'Coelophysis 'Deinonychus 'Tyrannosaur 'Amargasaurus 'Mamenchisaurus 'Pachycephalosaurus ' 'BinarySearch and Insert "": ' ' 'Oviraptor 'Coelophysis 'Deinonychus 'Tyrannosaur 'Amargasaurus 'Mamenchisaurus 'Pachycephalosaurus
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("Amargasaurus"); dinosaurs.Add("Mamenchisaurus"); dinosaurs.Add("Deinonychus"); Display(dinosaurs); DinoComparer dc = new DinoComparer(); Console.WriteLine("\nSort with alternate comparer:"); dinosaurs.Sort(dc); Display(dinosaurs); SearchAndInsert(dinosaurs, "Coelophysis", dc); Display(dinosaurs); SearchAndInsert(dinosaurs, "Oviraptor", dc); Display(dinosaurs); SearchAndInsert(dinosaurs, "Tyrannosaur", dc); Display(dinosaurs); SearchAndInsert(dinosaurs, null, dc); Display(dinosaurs); } private static void SearchAndInsert(List<string> list, string insert, DinoComparer dc) { Console.WriteLine("\nBinarySearch and Insert \"{0}\":", insert); int index = list.BinarySearch(insert, dc); if (index < 0) { list.Insert(~index, insert); } } 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 Amargasaurus Mamenchisaurus Deinonychus Sort with alternate comparer: Deinonychus Amargasaurus Mamenchisaurus Pachycephalosaurus BinarySearch and Insert "Coelophysis": Coelophysis Deinonychus Amargasaurus Mamenchisaurus Pachycephalosaurus BinarySearch and Insert "Oviraptor": Oviraptor Coelophysis Deinonychus Amargasaurus Mamenchisaurus Pachycephalosaurus BinarySearch and Insert "Tyrannosaur": Oviraptor Coelophysis Deinonychus Tyrannosaur Amargasaurus Mamenchisaurus Pachycephalosaurus BinarySearch and Insert "": Oviraptor Coelophysis Deinonychus Tyrannosaur Amargasaurus Mamenchisaurus Pachycephalosaurus */
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 SearchAndInsert(List<String^>^ list, String^ insert, DinoComparer^ dc) { Console::WriteLine("\nBinarySearch and Insert \"{0}\":", insert); int index = list->BinarySearch(insert, dc); if (index < 0) { list->Insert(~index, insert); } }; 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("Amargasaurus"); dinosaurs->Add("Mamenchisaurus"); dinosaurs->Add("Deinonychus"); Display(dinosaurs); DinoComparer^ dc = gcnew DinoComparer(); Console::WriteLine("\nSort with alternate comparer:"); dinosaurs->Sort(dc); Display(dinosaurs); SearchAndInsert(dinosaurs, "Coelophysis", dc); Display(dinosaurs); SearchAndInsert(dinosaurs, "Oviraptor", dc); Display(dinosaurs); SearchAndInsert(dinosaurs, "Tyrannosaur", dc); Display(dinosaurs); SearchAndInsert(dinosaurs, nullptr, dc); Display(dinosaurs); } /* This code example produces the following output: Pachycephalosaurus Amargasaurus Mamenchisaurus Deinonychus Sort with alternate comparer: Deinonychus Amargasaurus Mamenchisaurus Pachycephalosaurus BinarySearch and Insert "Coelophysis": Coelophysis Deinonychus Amargasaurus Mamenchisaurus Pachycephalosaurus BinarySearch and Insert "Oviraptor": Oviraptor Coelophysis Deinonychus Amargasaurus Mamenchisaurus Pachycephalosaurus BinarySearch and Insert "Tyrannosaur": Oviraptor Coelophysis Deinonychus Tyrannosaur Amargasaurus Mamenchisaurus Pachycephalosaurus BinarySearch and Insert "": Oviraptor Coelophysis Deinonychus Tyrannosaur Amargasaurus Mamenchisaurus Pachycephalosaurus */
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