Cours C Sharp Collection
Cours C Sharp Collection
Achref El Mouelhi
[Link]@[Link]
1 Introduction
2 Collections
BitArray
Queue
ArrayList
3 Collections génériques
List
Dictionary
Stack
4 Énumérations
5 Tuples
6 ValueTuples
C#
©A
C#
H I ©
UEL
O
f E LM
ch r e
©A
C#
Réponse
H I ©
EL
OU
Il faut connaitre à l’avance la taille du tableau.
M
e f
copier l’ancien (certainsrlangages
EL
Si on veut dépasser la taille déclarée, il faut créer un nouveau tableau puis
©
Il est difficile de supprimer ou d’ajouter un élément au milieu du tableau.
C#
C#
Collections ?
H I ©
sont des objets
UEL
O
type dynamiques f E LM
permettent de regrouper et gérer plusieurs objets de taille et/ou
ch r e
©A
(des tableaux multi-types extensibles)
C#
Quelques collections C#
H I ©
BitArray : tableau statique de booléens.
UEL
O
LM
Queue : file appliquant le principe FIFO (First In First Out).
r e f E
Hashtable : collection de couple clé/valeur.
ch
©A
SortedList : collection de couple clé/valeur ordonnée selon la
clé.
Stack : collection appliquant le principe LIFO (Last In First Out)
C#
H I ©
UEL
O
f E LM
ch r e
©A
C#
H I ©
Exemple avec BitArray
UEL
O
BitArray b = new BitArray(2);
f E LM
[Link](0, true);
ch r e
©A
[Link](1, false);
[Link](2, true);
C#
H I ©
Exemple avec BitArray
UEL
O
BitArray b = new BitArray(2);
f E LM
[Link](0, true);
ch r e
©A
[Link](1, false);
[Link](2, true);
C#
C#
Affiche 3 bonjour 5
C#
Exemple avec ArrayList
ArrayList arrayList = new ArrayList();
[Link](2);
[Link]("Bonjour");
[Link](’c’); H I ©
[Link](8);
U EL
O
[Link](’c’);
[Link](1);
f E LM
ch r e
©A
foreach (var o in arrayList)
{
[Link](o);
}
C#
Exemple avec ArrayList
ArrayList arrayList = new ArrayList();
[Link](2);
[Link]("Bonjour");
[Link](’c’); H I ©
[Link](8);
U EL
O
[Link](’c’);
[Link](1);
f E LM
ch r e
©A
foreach (var o in arrayList)
{
[Link](o);
}
Affiche 2 8
H & H: Research and Training 10 / 42
Collections ArrayList
C#
Pour créer un ArrayList et l’initialiser avec des éléments de même type (int par
exemple)
H I ©
U EL
O
f E LM
ch r e
©A
C#
Pour créer un ArrayList et l’initialiser avec des éléments de même type (int par
exemple)
H I ©
U EL
O
LM
ou aussi
e f E
ArrayList arrayList = new ArrayList(new[] { 2, 3, 5, 8, 2, 4, 2 });
r
ch
©A
C#
Pour créer un ArrayList et l’initialiser avec des éléments de même type (int par
exemple)
H I ©
U EL
O
LM
ou aussi
e f E
ArrayList arrayList = new ArrayList(new[] { 2, 3, 5, 8, 2, 4, 2 });
r
ch
©A
ou encore (cette écriture est valide même pour des éléments de type différent)
C#
C#
C#
C#
Exemples de collection génériques
List
LinkedList
SortedList
H I ©
Queue
UEL
O
Stack
f E LM
HashSet
ch r e
©A
Dictionary
...
C#
Exemples de collection génériques
List
LinkedList
SortedList
H I ©
Queue
UEL
O
Stack
f E LM
HashSet
ch r e
©A
Dictionary
...
C#
A chconversions inutiles
©
éviter de faire de
...
C#
Pour utiliser une liste, il faut importer le namespace
using [Link];
H I ©
UEL
O
f E LM
ch r e
©A
C#
Pour utiliser une liste, il faut importer le namespace
using [Link];
Déclaration
H I ©
List <type> nomListe = new List<type>();
UEL
O
f E LM
ch r e
©A
C#
Pour utiliser une liste, il faut importer le namespace
using [Link];
Déclaration
H I ©
List <type> nomListe = new List<type>();
UEL
O
f E LM
Exemple
ch r e
©A
List <string> voitures = new List<string>();
C#
Pour utiliser une liste, il faut importer le namespace
using [Link];
Déclaration
H I ©
List <type> nomListe = new List<type>();
UEL
O
f E LM
Exemple
ch r e
©A
List <string> voitures = new List<string>();
Déclaration + initialisation
List <string> voitures = new List<string> {"Citroen", "Ford", "
Peugeot", "Mercedes"};
C#
C#
ch r e
voitures[3] = "Volkswagen"; // correct
©A
[Link](voitures[2]); // imprime peugeot
voitures[5] = "Fiat"; // déclenche une exception car
il n’existe aucun élément d’indice 4
C#
Parcourir une liste avec un for
r e f E
ch
©A
C#
Parcourir une liste avec un for
r e f E
ch
©A
Parcourir une liste avec un foreach
H I ©
UEL
O
f E LM
ch r e
©A
Ou en plus simple
[Link]([Link]);
H I ©
UEL
O
f E LM
ch r e
©A
Ou en plus simple
[Link]([Link]);
H I ©
UEL
O
f E LM
On peut aussi définir une méthode d’impression personnalisée
Ou en plus simple
[Link]([Link]);
H I ©
UEL
O
f E LM
On peut aussi définir une méthode d’impression personnalisée
et ensuite la référencer
[Link](Print);
C#
RemoveAt(n) : supprime d’une liste l’élément d’indice n (il existe aussi Remove
et RemoveAll).
H I ©
IndexOf(n) : retourne l’indice de la première apparition de la valeur n dans
une liste.
UEL
O
f E LM
Contains(n) : retourne true si n appartient à la liste.
r e
Find(elt => condition) : retourne le premier élément de la liste qui
ch
©A
respecte condition (Exists fonctionne d’une manière similaire mais elle
retourne un booléen).
C#
Tableaux vs listes
H I ©
Un tableau peut être multidimensionnel mais
U ELil est de taille fixe.
L MO
Une liste est unidimensionnel mais elle est de taille variable.
r e E
f élément situé au début ou au milieu d’un
c h
On ne peut supprimer un
tableau.
©A
C#
Les dictionnaires
C#
Les dictionnaires
C#
Les dictionnaires
Exemple
C#
Remplir le dictionnaire
[Link](10, "messi");
[Link](23, "umtiti");
H I ©
EL
[Link](4, "Rakitic");
[Link](9, "Suarez");
O U
f E LM
r e
ch d’une valeur et/ou d’une clé à un
A
Vérifier l’appartenance
dictionnaire©
[Link]([Link]("iniesta"));
[Link]([Link](10));
H I ©
U EL
O
f E LM
ch r e
©A
C#
Pour récupérer la liste des valeurs, il faut déclarer un ValueCollection
Dictionary<int,string>.ValueCollection vals = [Link];
foreach (string elt in vals)
{
[Link](elt);
H I ©
}
U EL
O
f E LM
ch r e
©A
C#
Pour récupérer la liste des valeurs, il faut déclarer un ValueCollection
Dictionary<int,string>.ValueCollection vals = [Link];
foreach (string elt in vals)
{
[Link](elt);
H I ©
}
U EL
O
f E LM
r e
chd’un élément selon la clé
Pour modifier la valeur
fcb[10] = ©
A
"Rivaldo";
foreach (int elt in clefs)
{
[Link](elt);
}
C#
Exercice : étant donnée la liste suivante :
ArrayList arrayList = new ArrayList { 2, 5, "Bonjour
", true, ’c’, "3", "b", false, 10 };
H I ©
Écrire un programme C# qui permet de stocker dans un
U EL
O
dictionnaire les types contenus dans la liste list ainsi que le
f E LM
nombre d’éléments de cette liste appartenant à chaque type.
ch r e
Résultat attendu : ©A
Int32 = 3
Char = 1
String = 3
Bool =
C#
Les piles
une collection appliquant l’algorithme (LIFO, Last In First Out)
impossible donc de supprimer/modifier/lire un élément au milieu
H I ©
de la liste
UEL
O
f E LM
Déclaration
ch r e
©A
Stack<type> nomPile = new Stack<type>();
Exemple
Stack<int> pile = new Stack<int>();
C#
C#
C#
C#
C#
C#
Une énumération ? H I ©
UEL
un ensemble de constantes nommées O
f E LM
ch r e
ne pouvant pas être déclaré dans le Main
©A
H I ©
UEL
O
f E LM
ch r e
©A
Exemple
H I ©
EL
[Link]([Link]); // affiche Tennis
O U
f E LM
ch r e
©A
Exemple
H I ©
EL
[Link]([Link]); // affiche Tennis
O U
f E LM
ch r e
On peut utiliser une énumération comme un type
©A
Sports sport = [Link];
[Link](sport); // affiche Foot
Exemple
H I ©
EL
[Link]([Link]); // affiche Tennis
O U
f E LM
ch r e
On peut utiliser une énumération comme un type
©A
Sports sport = [Link];
[Link](sport); // affiche Foot
Récupérer la valeur
[Link]((int)sport); // affiche 0
[Link]((int)[Link]); // affiche 3
C#
C#
Un tuple ?
I ©
un objet acceptant plusieurs valeurs de type différent.
H
U EL
permettant à une méthode de retourner plusieurs valeurs sans
O
créer de classe ou de structure.
f E LM
ch r e
ses éléments pouvant être modifiés.
©A
impossible d’ajouter un nouvel élément, après création, ou d’en
supprimer un existant.
C#
Considérons les deux méthodes qui permettent de retourner la valeur min ou
max
O U
LM
public static int FindMin(int i, int j)
{
return i < j ? i : j;
r e f E
}
ch
©A
C#
Considérons les deux méthodes qui permettent de retourner la valeur min ou
max
O U
LM
public static int FindMin(int i, int j)
{
return i < j ? i : j;
r e f E
}
ch
©A
Question
Comment faire pour fusionner les deux méthodes sans tout en gardant le même
nombre de paramètres ?
H I ©
UEL
O
f E LM
ch r e
©A
H I ©
Une deuxième écriture
UEL
O
LM
public static Tuple<int, int> FindMinMax(int i, int j)
{
int max = i > j ? i : j;
r e f E
int min = i < j ? i : j;
ch
©A
return [Link](min, max);
}
H I ©
Une deuxième écriture
U EL
O
LM
public static Tuple<int, int> FindMinMax(int i, int j)
{
int max = i > j ? i : j;
r e f E
int min = i < j ? i : j;
ch
©A
return [Link](min, max);
}
Question
C#
H I ©
var tuple = FindMinMax(2, 3);
UEL
[Link]($"Le min de 2 et 3 est : { tuple.Item1 }");
O
LM
// affiche 2
r e f E
[Link]($"Le max de 2 et 3 est : { tuple.Item1}");
ch
©A
// affiche 3
C#
Remarques
I ©
Les éléments d’un tuple sont accessibles avec les Item1, Item2,
H
... Item7.
U EL
O
f E LM
Le dernier élément (le 8 ème élément) sera renvoyé à l’aide de la
propriété Rest.
ch r e
©A
Le dernier élément est souvent utilisé pour imbriquer un autre
tuple.
Un tuple peut imbriquer d’autres tuples. Cependant, il est
recommandé de le placer dans la dernière position.
C#
H I ©
UEL
O
f E LM
ch r e
©A
C#
H I ©
Rest retourne un tuple
UEL
O
[Link]([Link]);
f E LM
// affiche (8)
ch r e
©A
C#
H I ©
Rest retourne un tuple
UEL
O
[Link]([Link]);
f E LM
// affiche (8)
ch r e
©A
Pour récupérer la dernière valeur d’un tuple
[Link]([Link].Item1);
// affiche 8
C#
Tableaux vs tuples
H I ©
EL
Un tableau peut être multidimensionnel mais il est de taille fixe et
type unique.
M OU
E
Un tuple est un regroupent
f Lvaleurs non nommés pas forcément
de
de même type.
chr e
A
© supprimer un élément ni d’un tableau ni d’un tuple.
On ne peut
C#
ValueTuples ?
H I ©
UEL
un tuple acceptant un nombre variable de valeurs de type différent
O
(même plus que 8).
f E LM
ch r e
ses éléments peuvent être nommés.
©A
C#
C#
C#
H I ©
UEL
O
f E LM
ch r e
©A
C#
H I ©
Pour accéder à un élément, on utilise son nom EL
M OU
[Link](notes.note1);
// affiche 10
f E L
chr e
© A
C#
H I ©
Pour accéder à un élément, on utilise son nom EL
M OU
[Link](notes.note1);
// affiche 10
f E L
chr e
© A
Ou la propriété Item
[Link](notes.Item1);
// affiche 10