0% ont trouvé ce document utile (0 vote)
59 vues78 pages

Cours C Sharp Collection

Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
59 vues78 pages

Cours C Sharp Collection

Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

C# : collections, énumérations et tuples

Achref El Mouelhi

Docteur de l’université d’Aix-Marseille


Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel

[Link]@[Link]

H & H: Research and Training 1 / 42


Plan

1 Introduction
2 Collections
BitArray
Queue
ArrayList
3 Collections génériques
List
Dictionary
Stack
4 Énumérations
5 Tuples
6 ValueTuples

H & H: Research and Training 2 / 42


Introduction

C#

Collections, énumérations et tuples ? H I ©


UEL
des objets. O
f E LM
ch r e
permettant de regrouper et gérer plusieurs types de valeurs.

©A

H & H: Research and Training 3 / 42


Introduction

C#

Pourquoi ne pas utiliser les tableaux ?

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 4 / 42


Introduction

C#

Pourquoi ne pas utiliser les tableaux ?

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

reste difficile àA ch


manipuler).
ont proposés l’allocation dynamique mais ça

©
Il est difficile de supprimer ou d’ajouter un élément au milieu du tableau.

Il faut parcourir tout le tableau pour localiser un élément (problème d’indexation).

Les tableaux ne peuvent contenir des éléments de type différent.

H & H: Research and Training 4 / 42


Introduction

C#

Collections, énumérations et tuples, quelle différence ?


H I ©
Collections : tableaux de taille dynamique L
Eacceptant
simultanément des types diffé[Link]
L M
r e
Énumérations : comme f E
un tableau de constante.

A chstatique acceptant des types différents.


Tuples : tableau
©

H & H: Research and Training 5 / 42


Collections

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)

H & H: Research and Training 6 / 42


Collections

C#

Quelques collections C#

ArrayList : tableau dynamique ordonné.

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)

H & H: Research and Training 7 / 42


Collections BitArray

C#

Pour utiliser une liste, il faut importer le namespace


using [Link];

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 8 / 42


Collections BitArray

C#

Pour utiliser une liste, il faut importer le namespace


using [Link];

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);

H & H: Research and Training 8 / 42


Collections BitArray

C#

Pour utiliser une liste, il faut importer le namespace


using [Link];

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);

La dernière instruction déclenche une exception car on ne peut


dépasser la taille du tableau

H & H: Research and Training 8 / 42


Collections Queue

C#

Exemple avec Queue


Queue q = new Queue();
[Link](2);
[Link](3);
H I ©
[Link]("bonjour");
UEL
[Link](5);
O
[Link]();
f E LM
r
h q)
foreach (var o cin
e
{ © A
[Link](o);
}

H & H: Research and Training 9 / 42


Collections Queue

C#

Exemple avec Queue


Queue q = new Queue();
[Link](2);
[Link](3);
H I ©
[Link]("bonjour");
UEL
[Link](5);
O
[Link]();
f E LM
r
h q)
foreach (var o cin
e
{ © A
[Link](o);
}

Affiche 3 bonjour 5

H & H: Research and Training 9 / 42


Collections ArrayList

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);
}

H & H: Research and Training 10 / 42


Collections ArrayList

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)

ArrayList arrayList = new ArrayList(new int[] { 2, 3, 5, 8, 2, 4, 2 });

H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 11 / 42


Collections ArrayList

C#

Pour créer un ArrayList et l’initialiser avec des éléments de même type (int par
exemple)

ArrayList arrayList = new ArrayList(new int[] { 2, 3, 5, 8, 2, 4, 2 });

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

H & H: Research and Training 11 / 42


Collections ArrayList

C#

Pour créer un ArrayList et l’initialiser avec des éléments de même type (int par
exemple)

ArrayList arrayList = new ArrayList(new int[] { 2, 3, 5, 8, 2, 4, 2 });

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)

ArrayList arrayList = new ArrayList{ 2, 3, 5, 8, 2, 4, 2 };

H & H: Research and Training 11 / 42


Collections ArrayList

C#

Exercice : considérons la liste suivante


ArrayList arrayList = new ArrayList{ 2, 3, 5, 8, 2,
4, 2 };
H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 12 / 42


Collections ArrayList

C#

Exercice : considérons la liste suivante


ArrayList arrayList = new ArrayList{ 2, 3, 5, 8, 2,
4, 2 };
H I ©
U EL
O
f E LM
Question
ch r e
©A
Écrire un code C# qui permet de supprimer la deuxième occurrence
de 2 (la solution proposée doit fonctionner quelle que soit la liste.

H & H: Research and Training 12 / 42


Collections génériques

C#

Les collections génériques ?


H I ©
sont des collections
U EL
avec précision de type, maisL M O
toujours de taille dynamique
re f E
c h
(des tableaux extensibles)
©A

H & H: Research and Training 13 / 42


Collections génériques

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

...

H & H: Research and Training 14 / 42


Collections génériques

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

...

La collection ArrayList n’accepte pas la généricité.

H & H: Research and Training 14 / 42


Collections génériques

C#

Pourquoi utiliser les collections génériques ?


Pour
H I ©
imposer un type pour tous les élémentsUdeElaLcollection
éviter d’avoir des exceptionsL
Oattendu ne correspond pas
Mtype
r
au type d’un élément e f E si le

A chconversions inutiles
©
éviter de faire de
...

H & H: Research and Training 15 / 42


Collections génériques List

C#
Pour utiliser une liste, il faut importer le namespace
using [Link];

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 16 / 42


Collections génériques List

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

H & H: Research and Training 16 / 42


Collections génériques List

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>();

H & H: Research and Training 16 / 42


Collections génériques List

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"};

H & H: Research and Training 16 / 42


Collections génériques List

C#

Ajout d’un élément


[Link]("Renault");
H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 17 / 42


Collections génériques List

C#

Ajout d’un élément


[Link]("Renault");
H I ©
UEL
O
f E LM
Accès à un élément d’une liste en lecture ou en écriture

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

H & H: Research and Training 17 / 42


Collections génériques List

C#
Parcourir une liste avec un for

for (int i = 0; i < [Link]-1; i++)


{
[Link](voitures[i]);
}
H I ©
EL
// Count retourne la taille exacte du tableau
// Atttention à l’utilisation de Capacity qui retourne le plus
O U
LM
petit multiple de 4 supérieur au égal à la taille réelle de
la liste

r e f E
ch
©A

H & H: Research and Training 18 / 42


Collections génériques List

C#
Parcourir une liste avec un for

for (int i = 0; i < [Link]-1; i++)


{
[Link](voitures[i]);
}
H I ©
EL
// Count retourne la taille exacte du tableau
// Atttention à l’utilisation de Capacity qui retourne le plus
O U
LM
petit multiple de 4 supérieur au égal à la taille réelle de
la liste

r e f E
ch
©A
Parcourir une liste avec un foreach

foreach (var voiture in voitures)


{
[Link](voiture);
}

H & H: Research and Training 18 / 42


Collections génériques List

Parcourir une liste avec un .ForEach

[Link](elt => [Link](elt));

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 19 / 42


Collections génériques List

Parcourir une liste avec un .ForEach

[Link](elt => [Link](elt));

Ou en plus simple

[Link]([Link]);

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 19 / 42


Collections génériques List

Parcourir une liste avec un .ForEach

[Link](elt => [Link](elt));

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

static void Print(string s)


{
ch r e
} ©A
[Link](s);

H & H: Research and Training 19 / 42


Collections génériques List

Parcourir une liste avec un .ForEach

[Link](elt => [Link](elt));

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

static void Print(string s)


{
ch r e
} ©A
[Link](s);

et ensuite la référencer

[Link](Print);

H & H: Research and Training 19 / 42


Collections génériques List

C#

Autres méthodes sur les listes

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).

Sort() : trie une liste d’entiers.

ToArray() : retourne un tableau statique résultat de la conversion de la liste.


...

H & H: Research and Training 20 / 42


Collections génériques List

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

H & H: Research and Training 21 / 42


Collections génériques Dictionary

C#

Les dictionnaires

une collection de couple clé/valeur

une clé est un indice personnalisé (unique)


H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 22 / 42


Collections génériques Dictionary

C#

Les dictionnaires

une collection de couple clé/valeur

une clé est un indice personnalisé (unique)


H I ©
U EL
O
Déclaration
f E LM
Dictionary<type1, c
r e
h dic = new Dictionary<type1, type2>();
© A type2>

H & H: Research and Training 22 / 42


Collections génériques Dictionary

C#

Les dictionnaires

une collection de couple clé/valeur

une clé est un indice personnalisé (unique)


H I ©
U EL
O
Déclaration
f E LM
Dictionary<type1, c
r e
h dic = new Dictionary<type1, type2>();
© A type2>

Exemple

Dictionary<int, string> fcb = new Dictionary<int, string>();

H & H: Research and Training 22 / 42


Collections génériques Dictionary

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 & H: Research and Training 23 / 42


Collections génériques Dictionary

Parcourir le dictionnaire et afficher le couple (clé,valeur)

foreach (KeyValuePair<int,string> elt in fcb)


{
[Link]([Link] + [Link]);
}

H I ©
U EL
O
f E LM
ch r e
©A

H & H: Research and Training 24 / 42


Collections génériques Dictionary

Parcourir le dictionnaire et afficher le couple (clé,valeur)

foreach (KeyValuePair<int,string> elt in fcb)


{
[Link]([Link] + [Link]);
}

Parcourir le dictionnaire pour afficher les valeurs


H I ©
foreach (string elt in [Link])
U EL
O
LM
{
[Link](elt);
}
r e f E
ch
©A

H & H: Research and Training 24 / 42


Collections génériques Dictionary

Parcourir le dictionnaire et afficher le couple (clé,valeur)

foreach (KeyValuePair<int,string> elt in fcb)


{
[Link]([Link] + [Link]);
}

Parcourir le dictionnaire pour afficher les valeurs


H I ©
foreach (string elt in [Link])
U EL
O
LM
{
[Link](elt);
}
r e f E
ch
©A
Pour récupérer la liste des clés, il faut déclarer un KeyCollection

Dictionary<int,string>.KeyCollection clefs = [Link];


foreach (int elt in clefs)
{
[Link](elt);
}

H & H: Research and Training 24 / 42


Collections génériques Dictionary

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

H & H: Research and Training 25 / 42


Collections génériques Dictionary

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);
}

H & H: Research and Training 25 / 42


Collections génériques Dictionary

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 =

H & H: Research and Training 26 / 42


Collections génériques Stack

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>();

H & H: Research and Training 27 / 42


Collections génériques Stack

C#

Empiler : ajouter un élément au sommet de la pile


[Link](2);
[Link](1);
[Link](5);
H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 28 / 42


Collections génériques Stack

C#

Empiler : ajouter un élément au sommet de la pile


[Link](2);
[Link](1);
[Link](5);
H I ©
UEL
Parcourir une pile O
f E LM
foreach (int elt in pile)
[Link](elt); ch r e
// affiche 5 1 2 ©A

H & H: Research and Training 28 / 42


Collections génériques Stack

C#

Empiler : ajouter un élément au sommet de la pile


[Link](2);
[Link](1);
[Link](5);
H I ©
UEL
Parcourir une pile O
f E LM
foreach (int elt in pile)
[Link](elt); ch r e
// affiche 5 1 2 ©A
Consulter un élément au sommet de la pile
[Link]();

H & H: Research and Training 28 / 42


Collections génériques Stack

C#

Dépiler : supprimer l’élément au sommet de la pile


H I ©
[Link]();
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 29 / 42


Collections génériques Stack

C#

Dépiler : supprimer l’élément au sommet de la pile


H I ©
[Link]();
UEL
M O
f
Supprimer tous les élémentsE L
de la pile
[Link](); ch
r e
©A

H & H: Research and Training 29 / 42


Énumérations

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 & H: Research and Training 30 / 42


Énumérations

Déclaration d’une énumération

enum Sports { Foot, Hand, Hockey, Tennis, Basket };

Par défaut, le premier élément a la valeur 0.


L’élément successif a une valeur augmenté de 1.

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 31 / 42


Énumérations

Déclaration d’une énumération

enum Sports { Foot, Hand, Hockey, Tennis, Basket };

Par défaut, le premier élément a la valeur 0.


L’élément successif a une valeur augmenté de 1.

Exemple

H I ©
EL
[Link]([Link]); // affiche Tennis

O U
f E LM
ch r e
©A

H & H: Research and Training 31 / 42


Énumérations

Déclaration d’une énumération

enum Sports { Foot, Hand, Hockey, Tennis, Basket };

Par défaut, le premier élément a la valeur 0.


L’élément successif a une valeur augmenté de 1.

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

H & H: Research and Training 31 / 42


Énumérations

Déclaration d’une énumération

enum Sports { Foot, Hand, Hockey, Tennis, Basket };

Par défaut, le premier élément a la valeur 0.


L’élément successif a une valeur augmenté de 1.

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

H & H: Research and Training 31 / 42


Énumérations

C#

Déclaration d’une énumération + modification des constantes par défaut


enum Sports { Foot=2, Hand, Hockey=5, Tennis, Basket };
H I ©
UEL
O
Exemple
f E LM
ch r e
© A
[Link]((int)[Link]); // affiche 3
[Link]((int)[Link]); // affiche 5
[Link]((int)[Link]); // affiche 6

H & H: Research and Training 32 / 42


Tuples

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.

H & H: Research and Training 33 / 42


Tuples

C#
Considérons les deux méthodes qui permettent de retourner la valeur min ou
max

public static int FindMax(int i, int j)


{
return i > j ? i : j;
H I ©
EL
}

O U
LM
public static int FindMin(int i, int j)
{
return i < j ? i : j;
r e f E
}
ch
©A

H & H: Research and Training 34 / 42


Tuples

C#
Considérons les deux méthodes qui permettent de retourner la valeur min ou
max

public static int FindMax(int i, int j)


{
return i > j ? i : j;
H I ©
EL
}

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 & H: Research and Training 34 / 42


Tuples

On peut utiliser les tuples

public static Tuple<int, int> FindMinMax(int i, int j)


{
int max = i > j ? i : j;
int min = i < j ? i : j;
return new Tuple<int, int>(min, max);
}

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 35 / 42


Tuples

On peut utiliser les tuples

public static Tuple<int, int> FindMinMax(int i, int j)


{
int max = i > j ? i : j;
int min = i < j ? i : j;
return new Tuple<int, int>(min, max);
}

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 & H: Research and Training 35 / 42


Tuples

On peut utiliser les tuples

public static Tuple<int, int> FindMinMax(int i, int j)


{
int max = i > j ? i : j;
int min = i < j ? i : j;
return new Tuple<int, int>(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

Comment faire pour accéder aux valeurs du tuple retourné ?

H & H: Research and Training 35 / 42


Tuples

C#

Pour accéder aux valeurs d’un tuple

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

H & H: Research and Training 36 / 42


Tuples

C#

Remarques

Un tuple accepte au maximum 8 éléments.

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.

H & H: Research and Training 37 / 42


Tuples

C#

Considérons le tuple suivant


var t = [Link](1, 2, 3, 4, 5, 6, 7, 8);

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 38 / 42


Tuples

C#

Considérons le tuple suivant


var t = [Link](1, 2, 3, 4, 5, 6, 7, 8);

H I ©
Rest retourne un tuple
UEL
O
[Link]([Link]);
f E LM
// affiche (8)
ch r e
©A

H & H: Research and Training 38 / 42


Tuples

C#

Considérons le tuple suivant


var t = [Link](1, 2, 3, 4, 5, 6, 7, 8);

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

H & H: Research and Training 38 / 42


Tuples

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

H & H: Research and Training 39 / 42


ValueTuples

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

H & H: Research and Training 40 / 42


ValueTuples

C#

Considérons le ValueTuple suivant


var t = (1, 2, 3, 4, 5, 6, 7, 8, 9);
H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 41 / 42


ValueTuples

C#

Considérons le ValueTuple suivant


var t = (1, 2, 3, 4, 5, 6, 7, 8, 9);
H I ©
UEL
M O
E L
Pour accéder au dernier élfément
ch r e
// affiche ©9 A
[Link](t.Item9);

H & H: Research and Training 41 / 42


ValueTuples

C#

Il est possible de nommer les membres d’un tuple


(int note1, int note2, int note3) notes = (10, 20, 13);

H I ©
UEL
O
f E LM
ch r e
©A

H & H: Research and Training 42 / 42


ValueTuples

C#

Il est possible de nommer les membres d’un tuple


(int note1, int note2, int note3) notes = (10, 20, 13);

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

H & H: Research and Training 42 / 42


ValueTuples

C#

Il est possible de nommer les membres d’un tuple


(int note1, int note2, int note3) notes = (10, 20, 13);

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

H & H: Research and Training 42 / 42

Vous aimerez peut-être aussi