Tri C# : trier par rapport à OrderBy
En C#, nous disposons de plusieurs options pour trier les collections, notamment Sort et OrderBy. Cet article approfondira les différences entre ces deux méthodes et leurs algorithmes respectifs.
Tri
La méthode Sort effectue un tri sur place à l'aide de l'algorithme QuickSort. Il s'agit d'un algorithme de tri instable, ce qui signifie que l'ordre des éléments égaux peut ne pas être conservé après le tri.
OrderBy
La méthode OrderBy, quant à elle, effectue un sorte stable. Cela signifie que les éléments égaux conservent leur ordre relatif après le tri. OrderBy utilise en interne un algorithme de tri par fusion.
Comparaison des performances
Les performances de Sort et OrderBy varient en fonction de facteurs tels que la taille de la collection, le type d'éléments , et les critères de tri. En général, le tri est plus rapide pour les petites collections ou lors du tri par types de données primitifs. Cependant, pour les collections plus importantes ou les critères de tri complexes, OrderBy peut être plus efficace grâce à son algorithme de tri stable.
Scénarios d'utilisation
Le tri convient lorsque vous devez effectuer un tri sur place et n'a pas besoin de conserver l'ordre des éléments égaux. OrderBy est préférable lorsque la préservation de l'ordre des éléments égaux est importante ou lorsque vous devez effectuer des opérations supplémentaires (telles que le filtrage ou la projection) après le tri.
Exemple
Considérez l'exemple suivant :
List<Person> persons = new List<Person>(); persons.Add(new Person("P005", "Janson")); persons.Add(new Person("P002", "Aravind")); persons.Add(new Person("P007", "Kazhal"));
En utilisant Sort, nous pouvons trier la liste par name :
persons.Sort((p1, p2) => string.Compare(p1.Name, p2.Name, true));
En utilisant OrderBy, nous pouvons effectuer un tri stable à l'aide d'un comparateur personnalisé :
var query = persons.OrderBy(n => n.Name, new NameComparer()); class NameComparer : IComparer<string> { public int Compare(string x, string y) { return string.Compare(x, y, true); } }
Dans cet exemple, OrderBy est plus approprié car il garantit que l'ordre de l'égalité les noms sont préservés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!