Maison >développement back-end >C++ >Tri C# : Trier ou OrderBy : Quand dois-je utiliser lequel ?

Tri C# : Trier ou OrderBy : Quand dois-je utiliser lequel ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-30 02:05:091018parcourir

C# Sorting: Sort vs. OrderBy: When Should I Use Which?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn