Tutoriel sur les collections C# avec exemples

⚡ Résumé intelligent

En C#, les collections offrent une méthode flexible pour stocker et gérer des groupes d'objets. Contrairement aux tableaux, les collections s'agrandissent et se réduisent à l'exécution, et les espaces de noms System.Collections et System.Collections.Generic fournissent des types prédéfinis pour les listes, les dictionnaires, les piles et les files d'attente.

  • (I.e. Dimensionnement dynamique : Les collections ajoutent et suppriment des éléments lors de l'exécution, vous ne fixez donc pas leur taille à l'avance comme pour un tableau.
  • 📚 Espaces de noms: System.Collections contient les types non génériques, tandis que System.Collections.Generic contient les types génériques sûrs.
  • 🧱 Cours principaux : ArrayList, Stack, Queue, Hashtable, SortedList et BitArray couvrent les besoins non génériques courants.
  • Puissance générique : Les classes List, Dictionary, HashSet et Queue offrent une sécurité de type à la compilation et de meilleures performances.
  • (I.e. Bon choix : Utilisez un dictionnaire pour les recherches par clé, une liste pour les éléments ordonnés et une pile ou une file d'attente pour l'ordre LIFO ou FIFO.
  • 🤖 Aide à l'IA : GitHub Copilot génère le code de collection, et les pipelines ML.NET transmettent les données via des types de collections génériques.

Collections en C#

Dans notre didacticiel précédent, nous avons appris comment utiliser les tableaux en C#. Voyons-en un rapide aperçu, les tableaux en programmation sont utilisés pour regrouper un ensemble d'objets liés. Ainsi, on pourrait créer un tableau ou un ensemble d’entiers, accessible via un nom de variable.

Qu’est-ce que les collections en C# ?

Les collections sont similaires à Arrays, il offre une manière plus flexible de travailler avec un groupe d'objets.

Dans les tableaux, vous aurez remarqué qu’il faut au préalable définir le nombre d’éléments dans un tableau. Cela devait être fait lorsque le tableau était déclaré.

Mais dans une collection, vous n’avez pas besoin de définir au préalable la taille de la collection. Vous pouvez ajouter des éléments ou même supprimer des éléments de la collection à tout moment. Ce chapitre se concentrera sur la façon dont nous pouvons travailler avec les différentes collections disponibles en C#.

Classes System.Collections

Le framework .NET regroupe les classes de collections non génériques d'origine dans l'espace de noms System.Collections. Le tableau ci-dessous récapitule les principaux types utilisables immédiatement.

Collection Description
ArrayList La collection ArrayList est similaire aux Arrays type de données en C#. La plus grande différence réside dans la nature dynamique de la collection de listes de tableaux.
Stack La pile est un cas particulier de collection qui représente un concept de type dernier entré, premier sorti (LIFO).
Queues La file d'attente est un cas particulier qui représente le concept du premier entré, premier sorti.
Table de hachage Une table de hachage est une collection spéciale utilisée pour stocker des éléments de type clé-valeur.
Liste triée SortedList est une collection qui stocke par défaut les paires clé-valeur dans l'ordre croissant de clé.
BitArray Un tableau de bits est un tableau de structures de données qui stocke des bits.

Collections génériques en C#

Les classes non génériques ci-dessus stockent chaque élément comme un objet générique, ce qui empêche le compilateur de vérifier le type et engendre un léger surcoût lié à l'encapsulation des valeurs. Pour pallier ce problème, C# a introduit l'espace de noms System.Collections.Generic, où chaque collection est liée à un type déclaré.

Une collection générique telle que Liste Elle n'accepte que des chaînes de caractères, ce qui permet de détecter les erreurs à la compilation et d'éviter les conversions de type lors de la lecture d'un élément. Les collections génériques sont ainsi plus sûres, plus rapides et plus lisibles, et c'est pourquoi elles sont privilégiées par défaut dans le code C# moderne.

Les collections génériques les plus courantes sont énumérées ci-dessous :

  • Liste : Une liste redimensionnable et indexée, le remplacement générique d'ArrayList.
  • Dictionnaire : Stocke les paires clé-valeur avec des recherches rapides basées sur le hachage.
  • Ensemble de hachage : Ne contient que des valeurs uniques et prend en charge les opérations ensemblistes telles que l'union.
  • File d'attente : Une collection premier entré, premier sorti, la version générique de Queue.
  • Empiler : Une collection « dernier entré, premier sorti », la version générique de Stack.
  • Liste triée : Conserve les paires clé-valeur triées par clé dans l'ordre croissant.

Exemple de collection de listes en C#

La classe List est la collection générique la plus utilisée car elle se comporte comme un tableau dynamique. L'exemple ci-dessous crée une liste de chaînes de caractères, y ajoute et en supprime des éléments, lit sa taille, puis affiche les valeurs restantes. Tout le code est écrit dans le fichier Program.cs.

Étape 1) Importez l'espace de noms System.Collections.Generic et déclarez une liste de chaînes de caractères.

Étape 2) Ajoutez des éléments avec la méthode Add et supprimez-en un avec la méthode Remove.

Étape 3) Lisez la propriété Count, puis parcourez la liste à l'aide d'une instruction foreach.

using System;
using System.Collections.Generic;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   List<string> tutorials = new List<string>();
   tutorials.Add("Java");
   tutorials.Add("Python");
   tutorials.Add("Kotlin");
   tutorials.Remove("Python");
   Console.WriteLine(tutorials.Count);
   foreach (string tutorial in tutorials)
   {
    Console.WriteLine(tutorial);
   }
   Console.ReadKey();
  }
 }
}

Code Explication:-

  1. L'espace de noms System.Collections.Generic est importé afin que le type List soit disponible pour le programme.
  2. Une nouvelle liste Un dossier intitulé « tutorials » est créé, et trois noms sont ajoutés à l'aide de la méthode Add.
  3. La méthode Remove supprime la valeur «Python», ce qui laisse deux éléments dans la liste.
  4. La propriété Count renvoie le nombre d'éléments, et la boucle foreach affiche chaque valeur restante dans l'ordre.

Lorsque le programme s'exécute, il affiche d'abord le nombre de 2, Suivie par Java et Kotlin sur des lignes séparées. Ceci montre comment la taille d'une collection change à l'exécution, ce qu'un tableau de taille fixe ne peut pas faire.

Différence entre les tableaux et les collections en C#

A la fois un tableau Une collection regroupe des éléments similaires sous un même nom, mais leur comportement diffère une fois le programme lancé. Savoir quand utiliser l'une ou l'autre permet d'écrire un code plus clair et plus efficace.

Les principales différences sont énumérées ci-dessous :

  • Dimensions Un tableau a une longueur fixe définie lors de sa déclaration, tandis qu'une collection peut s'agrandir ou se réduire à tout moment.
  • Gestion des types : Un tableau stocke un seul type, tandis qu'une collection peut être de type sûr grâce aux génériques ou contenir des objets de types mixtes lorsqu'elle n'est pas générique.
  • Endroit: Les tableaux sont intégrés au langage, tandis que les classes de collections résident dans les espaces de noms System.Collections et System.Collections.Generic.
  • Opérations intégrées : Les collections offrent des méthodes prêtes à l'emploi pour ajouter, supprimer, rechercher et trier des éléments, tandis que les tableaux ne fournissent qu'un accès indexé de base.
  • Utilisation optimale : Choisissez un tableau lorsque le nombre d'éléments est connu et fixe, et une collection lorsque ce nombre change au fur et à mesure de l'exécution du programme.

En résumé, les tableaux sont plus adaptés aux données de taille fixe, tandis que les collections offrent la flexibilité dont la plupart des applications concrètes ont besoin.

FAQ

Utilisez un dictionnaire lorsque vous avez besoin de recherches rapides par clé unique, comme un identifiant associé à un enregistrement. Il trouve les valeurs en un temps quasi constant, tandis qu'une liste doit parcourir les éléments un par un.

Les HashSets et les dictionnaires offrent les recherches les plus rapides car ils utilisent le hachage pour accéder à un élément en un temps quasi constant. Une liste ou un tableau est plus lent car il peut être nécessaire de vérifier chaque élément séquentiellement.

Les collections concurrentes résident dans l'espace de noms System.Collections.Concurrent et sont conçues pour le code multithread. Des types tels que ConcurrentDictionary et BlockingCollection permettent à plusieurs threads d'ajouter et de supprimer des éléments en toute sécurité, sans verrouillage manuel.

IEnumerable est l'interface de base qui permet uniquement de lire les éléments à l'aide d'une boucle foreach. ICollection l'étend et ajoute des méthodes telles que Count, Add et Remove, permettant ainsi de modifier la collection.

List est une collection générique et sûre qui stocke un seul type déclaré, ce qui permet des vérifications à la compilation et de meilleures performances. ArrayList, en revanche, n'est pas générique et stocke chaque élément comme un objet, ce qui nécessite un transtypage et autorise les types mixtes.

Une pile fonctionne selon le principe du dernier entré, premier sorti (LIFO) : l’élément le plus récent est retiré en premier (opération Pop). Une file d’attente fonctionne selon le principe du premier entré, premier sorti (FIFO) : l’élément le plus ancien est retiré en premier (opération Dequeue).

Oui. GitHub Copilot peut suggérer le type de collection approprié, générer des boucles qui ajoutent ou filtrent des éléments et compléter des requêtes LINQ à partir d'un court commentaire, ce qui accélère le travail avec les listes, les dictionnaires et autres collections.

ML.NET utilise des collections telles que List et IEnumerable pour l'entraînement, lesquelles correspondent à son pipeline IDataView. Le stockage des échantillons dans une collection générique fortement typée garantit la clarté et la sécurité des types du flux de travail d'apprentissage automatique.

Résumez cet article avec :