C# Programming

Tri des listes d’objets en C# : efficacité optimale

Spread the love

Trier efficacement des listes d’objets par une propriété spécifique est une compétence cruciale pour tout développeur C#. Cet article explore deux approches principales : l’utilisation de la méthode OrderBy de LINQ et l’utilisation de la méthode List<T>.Sort avec des délégués. Nous examinerons les forces et les faiblesses de chacune, vous aidant à choisir la meilleure méthode pour vos besoins spécifiques.

Table des matières

Utilisation de la méthode OrderBy de LINQ

La méthode OrderBy de LINQ fournit un moyen propre et lisible de trier les listes. Elle utilise des expressions lambda pour spécifier les critères de tri et renvoie une nouvelle liste triée, laissant la liste originale intacte. Ceci est idéal lorsque vous devez préserver les données d’origine.


public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Example
{
    public static void Main(string[] args)
    {
        List<Person> people = new List<Person>()
        {
            new Person { Name = "Alice", Age = 30 },
            new Person { Name = "Bob", Age = 25 },
            new Person { Name = "Charlie", Age = 35 }
        };

        // Trier par Nom (croissant)
        var sortedByName = people.OrderBy(p => p.Name).ToList();

        Console.WriteLine("Trié par Nom :");
        PrintPeople(sortedByName);

        // Trier par Âge (décroissant)
        var sortedByAgeDescending = people.OrderByDescending(p => p.Age).ToList();

        Console.WriteLine("nTrié par Âge (Décroissant) :");
        PrintPeople(sortedByAgeDescending);
    }

    static void PrintPeople(List<Person> people)
    {
        foreach (var person in people)
        {
            Console.WriteLine($"{person.Name}, {person.Age}");
        }
    }
}

Utilisation de délégués avec List<T>.Sort

Pour les situations exigeant plus de contrôle ou nécessitant la réutilisation de la logique de tri, les délégués offrent une alternative puissante. La méthode List<T>.Sort trie la liste *sur place*, modifiant directement la liste d’origine. Cela peut être plus efficace pour les très grandes listes, mais n’oubliez pas que cela modifie les données d’origine.


using System;
using System.Collections.Generic;

// ... classe Person ci-dessus ...

public class Example
{
    public static void Main(string[] args)
    {
        List<Person> people = new List<Person>()
        {
            new Person { Name = "Alice", Age = 30 },
            new Person { Name = "Bob", Age = 25 },
            new Person { Name = "Charlie", Age = 35 }
        };

        // Trier par Nom (croissant) en utilisant un délégué
        people.Sort((p1, p2) => p1.Name.CompareTo(p2.Name));

        Console.WriteLine("Trié par Nom (Sur place) :");
        PrintPeople(people);

        // Trier par Âge (décroissant) en utilisant un délégué
        people.Sort((p1, p2) => p2.Age.CompareTo(p1.Age)); // Notez l'ordre inversé pour le classement décroissant

        Console.WriteLine("nTrié par Âge (Décroissant, Sur place) :");
        PrintPeople(people);
    }
    // ... méthode PrintPeople ci-dessus ...
}

Choisir la bonne méthode

L’approche optimale dépend de vos exigences spécifiques :

  • OrderBy (LINQ) : Idéal pour les tâches de tri simples où la préservation de la liste d’origine est cruciale. Elle est généralement plus lisible.
  • List<T>.Sort (avec délégués) : Offre un plus grand contrôle et peut être plus efficace pour les très grandes listes lorsque la modification de la liste d’origine est acceptable. Utile pour une logique de comparaison complexe ou des fonctions de tri réutilisables.

Examinez attentivement si vous devez conserver l’ordre de la liste d’origine et les implications sur les performances de votre application avant de faire votre choix.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *