Découvrir comment gérer les collections de données avec List<T> dans C#

Ce didacticiel propose une introduction au langage C# et présente les concepts de base de la classe List<T>.

Prérequis

Le tutoriel suppose que vous avez un ordinateur configuré pour le développement local. Consultez Configurer votre environnement local pour obtenir des instructions d’installation et une vue d’ensemble du développement d’applications dans .NET.

Si vous préférez exécuter le code sans avoir à configurer un environnement local, consultez la version navigateur interactive de ce tutoriel.

Exemple de liste de base

Créez un répertoire nommé list-tutorial. Faites-en le répertoire actuel et exécutez dotnet new console.

Important

Les modèles C# pour .NET 6 utilisent des instructions de niveau supérieur. Votre application ne correspond peut-être pas au code de cet article, si vous avez déjà effectué une mise à niveau vers .NET 6. Pour plus d’informations, consultez l’article Les nouveaux modèles C# génèrent des instructions de niveau supérieur.

Le SDK .NET 6 ajoute également un ensemble de directives implicitesglobal using pour les projets qui utilisent les kits SDK suivants :

  • Microsoft.NET.Sdk
  • Microsoft.NET.Sdk.Web
  • Microsoft.NET.Sdk.Worker

Ces directives implicites global using incluent les espaces de noms les plus courants pour le type de projet.

Pour plus d’informations, consultez l’article sur les directives d’utilisation implicite

Ouvrez Program.cs dans votre éditeur favori, puis remplacez le code existant par le suivant :

List<string> names = ["<name>", "Ana", "Felipe"];
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

Remplacez <name> par votre nom. Enregistrez Program.cs. Tapez dotnet run dans votre fenêtre de console pour effectuer un essai.

Vous avez créé une liste de chaînes, ajouté trois noms à cette liste et affiché les noms en majuscules. Vous utilisez des concepts que vous avez appris dans les tutoriels précédents pour lire la liste en boucle.

Le code permettant d’afficher les noms utilise la fonctionnalité d’interpolation de chaîne. Quand vous faites précéder une string du caractère $, vous pouvez incorporer le code C# dans la déclaration de chaîne. La chaîne réelle remplace ce code C# par la valeur qu’elle génère. Dans cet exemple, elle remplace {name.ToUpper()} par chaque nom, converti en majuscules, car vous avez appelé la méthode ToUpper.

Continuons notre exploration.

Modifier le contenu de la liste

La collection que vous avez créée utilise le type List<T>. Ce type stocke les séquences d’éléments. Vous spécifiez le type des éléments entre crochets angulaires.

Un aspect important du type List<T> est qu’il peut augmenter ou diminuer, ce qui vous permet d’ajouter ou de supprimer des éléments. Ajoutez ce code à la fin de votre programme :

Console.WriteLine();
names.Add("Maria");
names.Add("Bill");
names.Remove("Ana");
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

Vous avez ajouté deux noms supplémentaires à la fin de la liste. Vous en avez également supprimé un. Enregistrez le fichier et tapez dotnet run pour effectuer un essai.

La List<T> vous permet en outre de faire référence à des éléments individuels par index. Vous placez l’index entre les jetons [ et ] après le nom de la liste. C# utilise la valeur 0 pour le premier index. Ajoutez le code directement sous le code que vous venez d’ajouter et effectuez un essai :

Console.WriteLine($"My name is {names[0]}");
Console.WriteLine($"I've added {names[2]} and {names[3]} to the list");

Vous ne pouvez pas accéder à un index au-delà de la fin de la liste. Rappelez-vous que les index commencent à partir de 0, de sorte que le plus grand index valide correspond au nombre d’éléments de la liste moins un. Vous pouvez vérifier la longueur de la liste à l’aide de la propriété Count. Ajoutez le code suivant à la fin de votre programme :

Console.WriteLine($"The list has {names.Count} people in it");

Enregistrez le fichier et tapez de nouveau dotnet run pour afficher les résultats.

Trier les listes et y effectuer des recherches

Nos exemples utilisent des listes relativement petites, mais vos applications peuvent souvent générer des listes contenant beaucoup plus d’éléments, qui se comptent parfois même en milliers. Pour rechercher des éléments dans ces collections plus volumineuses, vous devez rechercher différents éléments dans la liste. La méthode IndexOf recherche un élément et retourne l’index de ce dernier. Si l’élément ne figure pas dans la liste, IndexOf retourne -1. Ajoutez ce code en bas de votre programme :

var index = names.IndexOf("Felipe");
if (index == -1)
{
    Console.WriteLine($"When an item is not found, IndexOf returns {index}");
}
else
{
    Console.WriteLine($"The name {names[index]} is at index {index}");
}

index = names.IndexOf("Not Found");
if (index == -1)
{
    Console.WriteLine($"When an item is not found, IndexOf returns {index}");
}
else
{
    Console.WriteLine($"The name {names[index]} is at index {index}");

}

Il est également possible de trier les éléments de la liste. La méthode Sort trie tous les éléments de la liste dans l’ordre normal (par ordre alphabétique dans le cas de chaînes). Ajoutez ce code en bas de votre programme :

names.Sort();
foreach (var name in names)
{
    Console.WriteLine($"Hello {name.ToUpper()}!");
}

Enregistrez le fichier et tapez dotnet run pour tester cette dernière version.

Avant de passer à la section suivante, déplaçons le code actuel dans une méthode distincte. Cela nous permettra de travailler plus facilement avec un nouvel exemple. Placez tout le code que vous avez écrit dans une nouvelle méthode appelée WorkWithStrings(). Appelez cette méthode en haut de votre programme. Lorsque vous avez terminé, votre code devrait ressembler à ceci :

WorkWithStrings();

void WorkWithStrings()
{
    List<string> names = ["<name>", "Ana", "Felipe"];
    foreach (var name in names)
    {
        Console.WriteLine($"Hello {name.ToUpper()}!");
    }

    Console.WriteLine();
    names.Add("Maria");
    names.Add("Bill");
    names.Remove("Ana");
    foreach (var name in names)
    {
        Console.WriteLine($"Hello {name.ToUpper()}!");
    }

    Console.WriteLine($"My name is {names[0]}");
    Console.WriteLine($"I've added {names[2]} and {names[3]} to the list");

    Console.WriteLine($"The list has {names.Count} people in it");

    var index = names.IndexOf("Felipe");
    if (index == -1)
    {
        Console.WriteLine($"When an item is not found, IndexOf returns {index}");
    }
    else
    {
        Console.WriteLine($"The name {names[index]} is at index {index}");
    }

    index = names.IndexOf("Not Found");
    if (index == -1)
    {
        Console.WriteLine($"When an item is not found, IndexOf returns {index}");
    }
    else
    {
        Console.WriteLine($"The name {names[index]} is at index {index}");

    }

    names.Sort();
    foreach (var name in names)
    {
        Console.WriteLine($"Hello {name.ToUpper()}!");
    }
}

Listes d’autres types

Vous avez jusqu'à présent utilisé le type string dans les listes. Nous allons maintenant créer une List<T> en utilisant un autre type. Commençons par créer un ensemble de nombres.

Ajoutez ce qui suit à votre programme après avoir appelé WorkWithStrings() :

List<int> fibonacciNumbers = [1, 1];

Cela crée une liste d’entiers et définit les deux premiers entiers sur la valeur 1. Il s’agit des deux premières valeurs d’une séquence Fibonacci (séquence de nombres). Chaque nombre Fibonacci suivant correspond à la somme des deux nombres précédents. Ajoutez le code suivant :

var previous = fibonacciNumbers[fibonacciNumbers.Count - 1];
var previous2 = fibonacciNumbers[fibonacciNumbers.Count - 2];

fibonacciNumbers.Add(previous + previous2);

foreach (var item in fibonacciNumbers)
{
    Console.WriteLine(item);
}

Enregistrez le fichier et tapez dotnet run pour afficher les résultats.

Conseil

Pour vous concentrer uniquement sur cette section, vous pouvez commenter le code qui appelle WorkWithStrings();. Placez juste deux caractères / devant l’appel comme ceci : // WorkWithStrings();.

Problème

Vérifiez si vous pouvez mettre en pratique certains des concepts appris ici et dans d’autres leçons antérieures. Approfondissez à partir de ce que vous avez créé jusqu'à présent avec les nombres de Fibonacci. Essayez d’écrire le code pour générer les 20 premiers nombres de la séquence. (Astuce, le 20ème nombre Fibonacci est 6765.)

Terminer le test

Vous pouvez voir un exemple de solution en consultant l’exemple de code terminé sur GitHub.

À chaque itération de la boucle, vous sélectionnez les deux derniers entiers de la liste, les additionner et ajoutez la valeur obtenue à la liste. La boucle se répète jusqu'à ce que vous ayez ajouté 20 éléments à la liste.

Félicitations, vous avez terminé ce didacticiel sur les listes. Vous pouvez suivre d’autres tutoriels dans votre propre environnement de développement.

Vous pouvez en savoir plus sur l’utilisation du type List dans l’article des notions fondamentales de .NET sur les collections. Vous allez également en découvrir plus sur de nombreux autres types de collection.