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 :