- Comparateurs
(1) Array.Sort() ; Pour un tri personnalisé, il faut transmettre un comparateur, on peut passer une expression Lambda come comparateur
Array.Sort(nombres,(a,b)=>b-a);//second moins premier : ordre décroissant
Array.Sort(personnes,(a,b)=>a.Age-b.Age);//premier moins second : ordre croissant
(2) IComparer Interface fournie par C# servant de comparateur
- Collections
(1) Les classes collection en C# sont spécialement conçues pour le stockage et la récupération de données, elles fournissent des supports pour les piles (stack), files d'attente (queue), listes (list) et tables de hachage (hash table). La plupart des classes collection implémentent les mêmes interfaces.
Les classes collection ont diverses utilisations, par exemple l'allocation dynamique de mémoire pour les éléments, l'accès aux éléments par index, etc. Ces classes créent des collections d'objets de type Object, qui est la classe de base de tous les types de données en C#.
(2) Dans les espaces de noms System.Collections.Generic, System.Collections.Concurrent et System.Collections, de nombreux types de collections sont fournis, chaque type de collection ayant un usage spécifique. Voici un exemple avec l'espace de noms System.Collection :
| Classe | Description et utilisation |
|---|---|
| Tableau dynamique (ArrayList) | Longueur non fixe, peut stocker des données de tout type, la longueur change selon l'ajout ou suppression de contenu |
| Collection générique (List) | Semblable à ArrayList, mais List ne peut stocker que des données du même type, sa longueur n'est pas fixe |
| Dictionnaire (Dictionary) | Semblable à List. Ne peut stocker que des données de type fixe, longueur non fixe, stocke les données sous forme de paires clé-valeur |
| Table de hachage (Hashtable) | Une table de hachage permet d'accéder aux éléments via des clés. Chaque élément dans une table de hachage est composé d'une paire clé/valeur, la clé sert à accéder à l'élément spécifique. |
| Liste triée (SortedList) | Une liste triée combine un tableau et une table de hachage, permettant d'accéder aux éléments via clé ou index. Elle contient une liste accessible par clé ou index, si on utilise l'index ce comportement ressemble à un tableau dynamique, si on utilise la clé c'est comme une table de hachage. En outre, les éléments sont toujours triés par clé. |
| Pile (Stack) | Une pile représente une collection d'objets de type dernier entré, premier sorti (LIFO). S'utilise quand on a besoin d'un accès LIFO. Ajouter un élément est appelé push, retirer un élément est appelé pop. |
| File (Queue) | Une file représente une collection d'objets de type premier entré, premier sorti (FIFO). S'utilise quand on a besoin d'un accès FIFO. Ajouter un élément est appelé enqueue, retirer un élément est appelé dequeue. |
| Tableau binaire (BitArray) | Un BitArray représente un tableau binaire exprimé avec des 1 et 0. S'utilise quand on doit stocker des bits mais qu'on ne connaît pas le nombre exact à l'avance. On peut accéder aux éléments via un index entier, commençant à zéro. |
- ArrayList : Tableau dynamique
3.1 Définition
(1) ArrayList implémente les interfaces IList, ICollection, IEnumerable, ICloneable,
- IList : Liste, gère principalement l'insertion, ajout, suppression, accès par index, vérification de présence d'éléments dans la collection.
- ICollection : Collection. Gère principalement le nombre d'éléments, la copie, duplication de la collection.
- IEnumerable : Énumérable. Implémente l'itérateur, toute classe implémentant cette interface peut être parcourue en boucle.
- ICloneable : Clonable, gère principalement le clonage (copie) de la collection
(1) Tableau Array : longueur fixe, ne peut stocker que des données du même type
ArrayList : tableau dynamique, une collection de longueur variable pouvant stocker différents types de données
(2) L'utilisation d'ArrayList nécessite l'importation de l'espace de noms System.Collections
3.2 Propriétés
(1) collection.Count : longueur
ArrayList collection2 = new ArrayList() { 1,2,3,true,"Zhang Wei",'a',new int[] {111,222,333} };
Console.WriteLine(collection2.Count);//longueur
for (int i = 0; i < collection2.Count; i++)
{
Console.WriteLine(collection2[i]);
}
//var ou object
foreach (var v in collection2)
{
Console.WriteLine(v);
}
(2) ArrayList accède et modifie les valeurs via index
collection2[0] = "Zhang Wei";
Console.WriteLine(collection2[0]);
(3) ArrayList stocke les valeurs en les convertissant en type object, opération de boxing, les valeurs extraites sont aussi de type object
object texte1 = collection2[0];
string texte2 = (string)collection2[0];
string texte3 = collection2[0].ToString();
string texte4 = collection2[0] as string;
3.3 Méthodes d'ArrayList
(1) collection.Add() ; ajoute le paramètre à la fin de l'ArrayList
ArrayList collection3 = new ArrayList() { 1,2};
collection3.Add(123);//convertit 123 en object //boxing
(2) collection.AddRange() ; ajoute chaque élément de la collection paramètre à la fin de l'ArrayList
int[] nombres1 = { 111, 222, 333 };
collection3.AddRange(nombres1);
(3) colletcion.Clear() ; vide le tableau, supprime tous les éléments et met Count à 0
collection3.Clear();
Console.WriteLine(collection3.Count);//0
(4) collection.Insert() ; insère des données à l'index spécifié
collection3.Insert(1,"Li Ming");
(5) collection.InsertRange() ; insère le contenu de la collection à l'index spécifié
collection3.InsertRange(2, nombres1);
(6) collection.Contains() ; vérifie si l'ArrayList contient les données spécifiées, retourne true si présent, false sinon
Console.WriteLine(collection3.Contains("Wang Qiang"));
(7) collection.GetRange() ; extrait les données correspondantes de l'ArrayList, retourne un nouvel ArrayList; param1 : position de départ ; param2 : nombre d'éléments à extraire
ArrayList liste2 = collection3.GetRange(0,3);
(8) collection.SetRange() ; ajoute les éléments de la collection2 à la collection actuelle ; param1 position de départ
collection3.SetRange(1,nombres1);
(9) collection.IndexOf() ; recherche la première occurrence du paramètre de gauche à droite, retourne -1 si non trouvé ;
Console.WriteLine(collection3.IndexOf("Li Ming"));
(10) collection.LastIndexOf() ; recherche la première occurrence du paramètre de droite à gauche, retourne -1 si non trouvé ;
Console.WriteLine(collection3.LastIndexOf("Wang Qiang"));
(11) collection.Remove() ; supprime la première occurrence correspondante dans l'ArrayList
collection3.Remove("Li Ming");
(12) collection.RemoveAt() ; supprime l'élément à l'index spécifié dans l'ArrayList
collection3.RemoveAt(0);
(13) collection.RemoveRange() ; supprime les éléments dans la plage spécifiée, commence à 0 et supprime 3 éléments
collection3.RemoveRange(0,3);
(14) collection3.Reverse() ; inverse l'ordre
- List : Collection générique
(1) List : longueur variable, ne peut stocker que des données du même type ;
Format : List<type> nomVariable = new List<type>() ;
(2) Générique Type<T>
(3) liste.Count() ; longueur de la List
(4) liste.Add(1) ; liste.AddRange() ; liste.Insert() ;
(5) Les fonctions avancées de List sont identiques à celles de la classe Array
Différence : les fonctions avancées de la classe Array sont statiques ArrList.XXX(instance, condition) Les fonctions avancées de la classe List sont non statiques instance.xxx(condition)
- Dictionary Dictionnaire
(1) Un dictionnaire est une collection composée de clés (Key) et de valeurs (value)
(2) Dictionary<string,int> string est le type de la clé, int est le type de la valeur ; où la clé est similaire à un index, doit être unique, mais l'index ne peut être qu'un nombre et est ordonné, la clé supporte plusieurs types de données
(3) Les clés du dictionnaire doivent être uniques
(4) dic.Add() ; ajouter ; param1 clé param2 valeur
pairesCleValeur3.Add("Groupe3", new List<string>() { "111", "2222", "333" });
(5) Accès : via la clé
Console.WriteLine(paireCleValeur1s["a"]);//97
(6) dic1.Keys ; obtenir toutes les clés
Dictionary<string, List<string>>.KeyCollection cles1 = pairesCleValeur3.Keys;
(7) dic1.Values ; obtenir toutes les valeurs
Dictionary<string, List<string>>.ValueCollection valeurs1 = pairesCleValeur3.Values;
(8) dic1.Remove() ; dic.Clear() ;
(9) ContainsKey() vérifie si une clé spécifique est présente ;
ContainsValue() vérifie si une valeur spécifique est présente ;
(10) Parcourir le dictionnaire
KeyValuePair<type, type> le type doit correspondre au type du dictionnaire parcouru, item est la paire clé-valeur du dictionnaire
KeyValuePair<string, int> peut être remplacé par var
foreach (KeyValuePair<string, int> item in paireCleValeur1s)
{
Console.WriteLine("Clé:"+item.Key);
Console.WriteLine("Valeur:"+item.Value);
}
(11) FirstOrDefault() retourne la première paire clé-valeur satisfaisant la condition
- Hashtable : Table de hachage
6.1 Propriétés de la classe Hashtable
Le tableau suivant liste quelques propriétés couramment utilisées dans la classe Hashtable :
| Propriété | Description |
|---|---|
| Count | Obtient le nombre de paires clé-valeur dans la table de hachage |
| IsFixedSize | Obtient une valeur indiquant si la table de hachage a une taille fixe |
| IsReadOnly | Obtient une valeur indiquant si la table de hachage est en lecture seule |
| Keys | Obtient un ICollection contenant les clés de la table de hachage |
| Values | Obtient un ICollection contenant les valeurs de la table de hachage |
6.2 Méthodes de la classe Hashtable
Le tableau suivant liste quelques méthodes couramment utilisées dans la classe Hashtable :
| Méthode | Description |
|---|---|
| public virtual void Add(object key, object value) | Ajoute un élément avec la clé et la valeur spécifiées à la table de hachage |
| public virtual void Clear() | Supprime tous les éléments de la table de hachage |
| public virtual bool ContainsKey(object key) | Vérifie si la table de hachage contient la clé spécifiée |
| public virtual bool ContainsValue(object value) | Vérifie si la table de hachage contient la valeur spécifiée |
| public virtual void Remove(object key) | Supprime l'élément avec la clé spécifiée de la table de hachage |
- SortedList : Liste triée
7.1 Le tableau suivant liste quelques propriétés couramment utilisées dans la classe SortedList :
| Propriété | Description |
|---|---|
| Capacity | Obtient ou définit le nombre d'éléments que la liste triée peut contenir |
| Count | Obtient le nombre d'éléments dans la liste triée |
| IsFixedSize | Vérifie si la liste triée a une taille fixe |
| IsReadOnly | Vérifie si la liste triée est en lecture seule |
| Item | Obtient ou définit la valeur associée à la clé spécifiée dans la liste triée |
| Keys | Obtient une collection contenant toutes les clés de la liste triée |
| Values | Obtient une collection contenant toutes les valeurs de la liste triée |
7.2 Le tableau suivant liste quelques méthodes couramment utilisées dans la classe SortedList :
| Méthode | Description |
|---|---|
| public virtual void Add(object key, object value) | Ajoute un élément avec la clé et la valeur spécifiées à la liste triée |
| public virtual void Clear() | Supprime tous les éléments de la liste triée |
| public virtual bool ContainsKey(object key) | Vérifie si la liste triée contient la clé spécifiée |
| public virtual bool ContainsValue(object value) | Vérifie si la liste triée contient la valeur spécifiée |
| public virtual object GetByIndex(int index) | Obtient la valeur à l'index spécifié dans la liste triée |
| public virtual object GetKey(int index) | Obtient la clé à l'index spécifié dans la liste triée |
| public virtual IList GetKeyList() | Obtient les clés de la liste triée |
| public virtual IList GetValueList() | Obtient les valeurs de la liste triée |
| public virtual int IndexOfKey(object key) | Retourne l'index de la clé spécifiée dans la liste triée, index commence à zéro |
| public virtual int IndexOfValue(object value) | Retourne l'index de la première occurrence de la valeur spécifiée dans la liste triée, index commence à zéro |
| public virtual void Remove(object key) | Supprime l'élément avec la clé spécifiée de la liste triée |
| public virtual void RemoveAt(int index) | Supprime l'élément à l'index spécifié dans la liste triée |
| public virtual void TrimToSize() | Définit la capacité de la liste triée au nombre réel d'éléments |
- Stack : Pile
En C#, la classe pile (Stack) représente une collection d'objets de type dernier entré, premier sorti. Quand on a besoin d'un accès de type dernier entré, premier sorti, on peut utiliser une pile. Ajouter un élément à la pile est appelé push, retirer un élément de la pile est appelé pop
8.1 Le tableau suivant liste quelques propriétés couramment utilisées dans la classe Stack :
| Propriété | Description |
|---|---|
| Count | Obtient le nombre d'éléments dans la pile |
| IsSynchronized | Vérifie si l'accès à la pile est synchronisé (thread-safe) |
| SyncRoot | Obtient l'objet pouvant être utilisé pour synchroniser l'accès à la pile |
8.2 Le tableau suivant liste quelques méthodes couramment utilisées dans la classe Stack :
| Méthode | Description |
|---|---|
| public virtual void Clear() | Supprime tous les éléments de la pile |
| public virtual bool Contains(object obj) | Vérifie si un élément est dans la pile |
| public virtual object Peek() | Retourne l'objet au sommet de la pile sans le retirer |
| public virtual object Pop() | Retire et retourne l'objet au sommet de la pile |
| public virtual void Push(object obj) | Ajoute un objet au sommet de la pile |
| public virtual object[] ToArray() | Copie la pile dans un nouveau tableau |
- Queue : File d'attente
En C#, la classe file d'attente (Queue) est similaire à la pile, elle représente une collection d'objets de type premier entré, premier sorti, quand on a besoin d'un accès de type premier entré, premier sorti, on peut utiliser une file. Ajouter un élément à la file est appelé enqueue, retirer un élément de la file est appelé dequeue.
8.1 Propriétés de la classe Queue
| Propriété | Description |
|---|---|
| Count | Obtient le nombre d'éléments dans la file |
| IsSynchronized | Vérifie si l'accès à la file est synchronisé (thread-safe) |
| SyncRoot | Obtient l'objet pouvant être utilisé pour synchroniser l'accès à la file |
8.2 Méthodes de la classe Queue
| Méthode | Description |
|---|---|
| public virtual void Clear() | Supprime tous les éléments de la file |
| public virtual bool Contains(object obj) | Vérifie si un élément est dans la file |
| public virtual object Dequeue() | Retire et retourne l'objet au début de la file |
| public virtual void Enqueue(object obj) | Ajoute un objet à la fin de la file |
| public virtual object[] ToArray() | Copie la file dans un nouveau tableau |
| public virtual void TrimToSize() | Définit la capacité de la file au nombre réel d'éléments |
- Résumé
| Nom | Type fixe | Longueur fixe | Représentation de longueur |
|---|---|---|---|
| Array | Oui | Oui | Length |
| ArrayList | Non | Non | Count |
| List | Oui | Non | Count |
| Dictionary | Oui | Non | Count |
| Hashtable | Non | Non | Count |
| SortedList | - | Non | Count |
| Stack | Oui | Non | Count |
| Queue | Oui | Non | Count |