HOWTO · Csharp
Trier une liste par ordre alphabétique en C#
Cet article montre comment trier une liste par ordre alphabétique en C#.
Sur cette page
Pour trier une liste par ordre alphabétique en C#, appelez Sort() sur une List<T>. Pour les chaînes, le tri utilise le comparateur par défaut de la liste. Pour une liste d’objets, fournissez une comparaison qui lit la propriété à utiliser pour le tri. Sort() réorganise la liste existante : vous pouvez donc ensuite afficher cette même liste.
Trier une liste de chaînes par ordre alphabétique
List<string> possède déjà un comparateur par défaut : aucune fonction de comparaison distincte n’est donc nécessaire pour trier des chaînes. Ce comparateur suit les règles de comparaison des chaînes de la culture actuelle ; pour des mots anglais courants, l’exemple ci-dessous classe les noms par ordre alphabétique. Les règles culturelles peuvent modifier l’ordre relatif des caractères accentués ou sensibles à la culture. Utilisez une comparaison explicite si votre application a besoin d’un ordre indépendant de la culture.
Exécutez cet exemple. Le code et les noms affichés dans le bloc restent en anglais, car celui-ci est conservé à l’identique.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var words = new List<string> { "Pear", "Apple", "Orange" };
words.Sort();
foreach (string word in words)
{
Console.WriteLine(word);
}
}
}
Les noms affichés sont Apple, Orange et Pear, chacun sur sa propre ligne ; ils restent en anglais dans le bloc de code conservé à l’identique. L’appel trie words sur place : la variable désigne toujours la même liste, désormais dans son nouvel ordre. Cette méthode est utile lorsque le code qui suit doit utiliser la séquence triée. Si vous devez conserver l’ordre d’origine, copiez la liste avant d’appeler Sort().
Trier des objets selon une propriété choisie
Pour trier des objets, choisissez une propriété dans le délégué de comparaison transmis à Sort(). Le délégué reçoit deux éléments de la liste et renvoie une valeur négative si le premier doit venir avant le second, zéro si leurs clés de tri sont équivalentes, ou une valeur positive si le premier doit venir après le second. Ici, StringComparison.Ordinal donne aux noms un ordre ordinal cohérent fondé sur les unités de code UTF-16, sans appliquer les règles linguistiques de la culture actuelle. Si l’ordre est destiné à être affiché à un public particulier, choisissez plutôt un comparateur tenant compte de sa culture.
Le code et les noms affichés dans le bloc restent en anglais, car celui-ci est conservé à l’identique.
using System;
using System.Collections.Generic;
class Person
{
public string Name { get; }
public Person(string name) => Name = name;
}
class Program
{
static void Main()
{
var people = new List<Person>
{
new Person("Maya"),
new Person("Alex"),
new Person("Jordan")
};
people.Sort((left, right) =>
string.Compare(left.Name, right.Name, StringComparison.Ordinal));
foreach (Person person in people)
{
Console.WriteLine(person.Name);
}
}
}
Les deux valeurs transmises au délégué sont des objets Person, mais la comparaison utilise uniquement leurs valeurs Name. Les noms affichés par l’exemple restent en anglais, car le bloc de code est conservé à l’identique. Pour trier un autre type d’objet, remplacez Name par la propriété qui définit son ordre et utilisez le comparateur adapté au type de cette propriété. Si deux personnes portent le même nom, cette comparaison les considère comme égales ; ajoutez un critère de départage seulement si la tâche exige un ordre secondaire. La liste reste une List<Person> : ses éléments sont réorganisés au lieu d’être copiés dans une nouvelle collection.
Afficher la liste triée
Affichez les valeurs avant et après le tri pour voir le changement. Cet exemple complet commence par trois noms, affiche leur ordre initial, trie la même liste, puis affiche son nouvel ordre. foreach parcourt les éléments selon la séquence actuelle de la liste ; cette boucle n’effectue pas elle-même le tri. C’est l’appel à Sort() qui modifie cette séquence. Les libellés «Before sorting» et «After sorting» restent en anglais, car le bloc de code est conservé à l’identique.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var names = new List<string> { "Mina", "Eli", "Noah" };
Console.WriteLine("Before sorting:");
foreach (string name in names)
{
Console.WriteLine(name);
}
names.Sort();
Console.WriteLine("After sorting:");
foreach (string name in names)
{
Console.WriteLine(name);
}
}
}
La première boucle affiche les éléments dans leur ordre d’insertion. Après names.Sort(), la seconde parcourt la liste dans l’ordre déterminé par son comparateur de chaînes par défaut. Conservez les appels à Console.WriteLine si vous souhaitez examiner le résultat dans une application console ; dans un autre programme, vous pouvez transmettre directement la liste triée à l’opération suivante. Ces exemples utilisent uniquement les imports, les propriétés et la configuration nécessaires pour comprendre les deux méthodes de tri.