: tableaux, collections, enum´ erations et boucles´...c#: tableaux, collections, enum´ erations...

78
C# : collections, ´ enum ´ erations et tuples Achref El Mouelhi Docteur de l’universit ´ e d’Aix-Marseille Chercheur en programmation par contrainte (IA) Ing ´ enieur en g ´ enie logiciel [email protected] H & H: Research and Training 1 / 42

Upload: others

Post on 09-Oct-2020

12 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

C# : collections, enumerations et tuples

Achref El Mouelhi

Docteur de l’universite d’Aix-MarseilleChercheur en programmation par contrainte (IA)

Ingenieur en genie logiciel

[email protected]

H & H: Research and Training 1 / 42

Page 2: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

Plan

1 Introduction

2 CollectionsBitArrayQueueArrayList

3 Collections generiquesListDictionaryStack

4 Enumerations

5 Tuples

6 ValueTuples

H & H: Research and Training 2 / 42

Page 3: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Introduction

C#

Collections, enumerations et tuples?

des objets.

permettant de regrouper et gerer plusieurs types de valeurs.

H & H: Research and Training 3 / 42

Page 4: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Introduction

C#

Pourquoi ne pas utiliser les tableaux?

Reponse

Il faut connaitre a l’avance la taille du tableau.

Si on veut depasser la taille declaree, il faut creer un nouveau tableau puiscopier l’ancien (certains langages ont proposes l’allocation dynamique mais careste difficile a manipuler).

Il est difficile de supprimer ou d’ajouter un element au milieu du tableau.

Il faut parcourir tout le tableau pour localiser un element (probleme d’indexation).

Les tableaux ne peuvent contenir des elements de type different.

H & H: Research and Training 4 / 42

Page 5: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Introduction

C#

Pourquoi ne pas utiliser les tableaux?

Reponse

Il faut connaitre a l’avance la taille du tableau.

Si on veut depasser la taille declaree, il faut creer un nouveau tableau puiscopier l’ancien (certains langages ont proposes l’allocation dynamique mais careste difficile a manipuler).

Il est difficile de supprimer ou d’ajouter un element au milieu du tableau.

Il faut parcourir tout le tableau pour localiser un element (probleme d’indexation).

Les tableaux ne peuvent contenir des elements de type different.

H & H: Research and Training 4 / 42

Page 6: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Introduction

C#

Collections, enumerations et tuples, quelle difference?

Collections : tableaux de taille dynamique acceptantsimultanement des types differents.

Enumerations : comme un tableau de constante.

Tuples : tableau statique acceptant des types differents.

H & H: Research and Training 5 / 42

Page 7: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections

C#

Collections?

sont des objets

permettent de regrouper et gerer plusieurs objets de taille et/outype dynamiques

(des tableaux multi-types extensibles)

H & H: Research and Training 6 / 42

Page 8: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections

C#

Quelques collections C#

ArrayList : tableau dynamique ordonne.

BitArray : tableau statique de booleens.

Queue : file appliquant le principe FIFO (First In First Out).

Hashtable : collection de couple cle/valeur.

SortedList : collection de couple cle/valeur ordonnee selon lacle.

Stack : collection appliquant le principe LIFO (Last In First Out)

H & H: Research and Training 7 / 42

Page 9: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections BitArray

C#

Pour utiliser une liste, il faut importer le namespace

using System.Collections;

Exemple avec BitArray

BitArray b = new BitArray(2);b.Set(0, true);b.Set(1, false);b.Set(2, true);

La derniere instruction declenche une exception car on ne peutdepasser la taille du tableau

H & H: Research and Training 8 / 42

Page 10: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections BitArray

C#

Pour utiliser une liste, il faut importer le namespace

using System.Collections;

Exemple avec BitArray

BitArray b = new BitArray(2);b.Set(0, true);b.Set(1, false);b.Set(2, true);

La derniere instruction declenche une exception car on ne peutdepasser la taille du tableau

H & H: Research and Training 8 / 42

Page 11: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections BitArray

C#

Pour utiliser une liste, il faut importer le namespace

using System.Collections;

Exemple avec BitArray

BitArray b = new BitArray(2);b.Set(0, true);b.Set(1, false);b.Set(2, true);

La derniere instruction declenche une exception car on ne peutdepasser la taille du tableau

H & H: Research and Training 8 / 42

Page 12: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections Queue

C#

Exemple avec Queue

Queue q = new Queue();q.Enqueue(2);q.Enqueue(3);q.Enqueue("bonjour");q.Enqueue(5);q.Dequeue();

foreach (var o in q){

Console.WriteLine(o);}

Affiche 3 bonjour 5

H & H: Research and Training 9 / 42

Page 13: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections Queue

C#

Exemple avec Queue

Queue q = new Queue();q.Enqueue(2);q.Enqueue(3);q.Enqueue("bonjour");q.Enqueue(5);q.Dequeue();

foreach (var o in q){

Console.WriteLine(o);}

Affiche 3 bonjour 5

H & H: Research and Training 9 / 42

Page 14: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections ArrayList

C#

Exemple avec ArrayList

ArrayList arrayList = new ArrayList();arrayList.Add(2);arrayList.Add("Bonjour");arrayList.Add(’c’);arrayList.Add(8);arrayList.Remove(’c’);arrayList.RemoveAt(1);

foreach (var o in arrayList){

Console.WriteLine(o);}

Affiche 2 8

H & H: Research and Training 10 / 42

Page 15: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections ArrayList

C#

Exemple avec ArrayList

ArrayList arrayList = new ArrayList();arrayList.Add(2);arrayList.Add("Bonjour");arrayList.Add(’c’);arrayList.Add(8);arrayList.Remove(’c’);arrayList.RemoveAt(1);

foreach (var o in arrayList){

Console.WriteLine(o);}

Affiche 2 8H & H: Research and Training 10 / 42

Page 16: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections ArrayList

C#

Pour creer un ArrayList et l’initialiser avec des elements de meme type (int parexemple)

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

ou aussi

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

ou encore (cette ecriture est valide meme pour des elements de type different)

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

H & H: Research and Training 11 / 42

Page 17: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections ArrayList

C#

Pour creer un ArrayList et l’initialiser avec des elements de meme type (int parexemple)

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

ou aussi

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

ou encore (cette ecriture est valide meme pour des elements de type different)

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

H & H: Research and Training 11 / 42

Page 18: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections ArrayList

C#

Pour creer un ArrayList et l’initialiser avec des elements de meme type (int parexemple)

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

ou aussi

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

ou encore (cette ecriture est valide meme pour des elements de type different)

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

H & H: Research and Training 11 / 42

Page 19: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections ArrayList

C#

Exercice : considerons la liste suivante

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

Question

Ecrire un code C# qui permet de supprimer la deuxieme occurrencede 2 (la solution proposee doit fonctionner quelle que soit la liste.

H & H: Research and Training 12 / 42

Page 20: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections ArrayList

C#

Exercice : considerons la liste suivante

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

Question

Ecrire un code C# qui permet de supprimer la deuxieme occurrencede 2 (la solution proposee doit fonctionner quelle que soit la liste.

H & H: Research and Training 12 / 42

Page 21: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques

C#

Les collections generiques?

sont des collections

avec precision de type, mais toujours de taille dynamique

(des tableaux extensibles)

H & H: Research and Training 13 / 42

Page 22: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques

C#

Exemples de collection generiques

List

LinkedList

SortedList

Queue

Stack

HashSet

Dictionary

...

La collection ArrayList n’accepte pas la genericite.

H & H: Research and Training 14 / 42

Page 23: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques

C#

Exemples de collection generiques

List

LinkedList

SortedList

Queue

Stack

HashSet

Dictionary

...

La collection ArrayList n’accepte pas la genericite.

H & H: Research and Training 14 / 42

Page 24: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques

C#

Pourquoi utiliser les collections generiques?

Pour

imposer un type pour tous les elements de la collection

eviter d’avoir des exceptions si le type attendu ne correspond pasau type d’un element

eviter de faire de conversions inutiles

...

H & H: Research and Training 15 / 42

Page 25: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques List

C#Pour utiliser une liste, il faut importer le namespace

using System.Collections.Generic;

Declaration

List <type> nomListe = new List<type>();

Exemple

List <string> voitures = new List<string>();

Declaration + initialisation

List <string> voitures = new List<string> {"Citroen", "Ford", "Peugeot", "Mercedes"};

H & H: Research and Training 16 / 42

Page 26: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques List

C#Pour utiliser une liste, il faut importer le namespace

using System.Collections.Generic;

Declaration

List <type> nomListe = new List<type>();

Exemple

List <string> voitures = new List<string>();

Declaration + initialisation

List <string> voitures = new List<string> {"Citroen", "Ford", "Peugeot", "Mercedes"};

H & H: Research and Training 16 / 42

Page 27: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques List

C#Pour utiliser une liste, il faut importer le namespace

using System.Collections.Generic;

Declaration

List <type> nomListe = new List<type>();

Exemple

List <string> voitures = new List<string>();

Declaration + initialisation

List <string> voitures = new List<string> {"Citroen", "Ford", "Peugeot", "Mercedes"};

H & H: Research and Training 16 / 42

Page 28: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques List

C#Pour utiliser une liste, il faut importer le namespace

using System.Collections.Generic;

Declaration

List <type> nomListe = new List<type>();

Exemple

List <string> voitures = new List<string>();

Declaration + initialisation

List <string> voitures = new List<string> {"Citroen", "Ford", "Peugeot", "Mercedes"};

H & H: Research and Training 16 / 42

Page 29: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques List

C#

Ajout d’un element

voitures.Add("Renault");

Acces a un element d’une liste en lecture ou en ecriture

voitures[3] = "Volkswagen"; // correctConsole.WriteLine(voitures[2]); // imprime peugeotvoitures[5] = "Fiat"; // declenche une exception car

il n’existe aucun element d’indice 4

H & H: Research and Training 17 / 42

Page 30: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques List

C#

Ajout d’un element

voitures.Add("Renault");

Acces a un element d’une liste en lecture ou en ecriture

voitures[3] = "Volkswagen"; // correctConsole.WriteLine(voitures[2]); // imprime peugeotvoitures[5] = "Fiat"; // declenche une exception car

il n’existe aucun element d’indice 4

H & H: Research and Training 17 / 42

Page 31: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques List

C#

Parcourir une liste avec un for

for (int i = 0; i < voitures.Count-1; i++){

Console.WriteLine(voitures[i]);}// Count retourne la taille exacte du tableau// Atttention a l’utilisation de Capacity qui retourne le plus

petit multiple de 4 superieur au egal a la taille reelle dela liste

Parcourir une liste avec un foreach

foreach (var voiture in voitures){

Console.WriteLine(voiture);}

H & H: Research and Training 18 / 42

Page 32: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques List

C#

Parcourir une liste avec un for

for (int i = 0; i < voitures.Count-1; i++){

Console.WriteLine(voitures[i]);}// Count retourne la taille exacte du tableau// Atttention a l’utilisation de Capacity qui retourne le plus

petit multiple de 4 superieur au egal a la taille reelle dela liste

Parcourir une liste avec un foreach

foreach (var voiture in voitures){

Console.WriteLine(voiture);}

H & H: Research and Training 18 / 42

Page 33: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques List

Parcourir une liste avec un .ForEach

voitures.ForEach(elt => Console.WriteLine(elt));

Ou en plus simple

voitures.ForEach(Console.WriteLine);

On peut aussi definir une methode d’impression personnalisee

static void Print(string s){

Console.WriteLine(s);}

et ensuite la referencer

voitures.ForEach(Print);

H & H: Research and Training 19 / 42

Page 34: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques List

Parcourir une liste avec un .ForEach

voitures.ForEach(elt => Console.WriteLine(elt));

Ou en plus simple

voitures.ForEach(Console.WriteLine);

On peut aussi definir une methode d’impression personnalisee

static void Print(string s){

Console.WriteLine(s);}

et ensuite la referencer

voitures.ForEach(Print);

H & H: Research and Training 19 / 42

Page 35: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques List

Parcourir une liste avec un .ForEach

voitures.ForEach(elt => Console.WriteLine(elt));

Ou en plus simple

voitures.ForEach(Console.WriteLine);

On peut aussi definir une methode d’impression personnalisee

static void Print(string s){

Console.WriteLine(s);}

et ensuite la referencer

voitures.ForEach(Print);

H & H: Research and Training 19 / 42

Page 36: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques List

Parcourir une liste avec un .ForEach

voitures.ForEach(elt => Console.WriteLine(elt));

Ou en plus simple

voitures.ForEach(Console.WriteLine);

On peut aussi definir une methode d’impression personnalisee

static void Print(string s){

Console.WriteLine(s);}

et ensuite la referencer

voitures.ForEach(Print);

H & H: Research and Training 19 / 42

Page 37: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques List

C#

Autres methodes sur les listes

RemoveAt(n) : supprime d’une liste l’element d’indice n (il existe aussi Removeet RemoveAll).

IndexOf(n) : retourne l’indice de la premiere apparition de la valeur n dansune liste.

Contains(n) : retourne true si n appartient a la liste.

Find(elt => condition) : retourne le premier element de la liste quirespecte condition (Exists fonctionne d’une maniere similaire mais elleretourne un booleen).

Sort() : trie une liste d’entiers.

ToArray() : retourne un tableau statique resultat de la conversion de la liste.

...

H & H: Research and Training 20 / 42

Page 38: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques List

C#

Tableaux vs listes

Un tableau peut etre multidimensionnel mais il est de taille fixe.

Une liste est unidimensionnel mais elle est de taille variable.

On ne peut supprimer un element situe au debut ou au milieu d’untableau.

H & H: Research and Training 21 / 42

Page 39: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Dictionary

C#

Les dictionnaires

une collection de couple cle/valeur

une cle est un indice personnalise (unique)

Declaration

Dictionary<type1, type2> dic = new Dictionary<type1, type2>();

Exemple

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

H & H: Research and Training 22 / 42

Page 40: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Dictionary

C#

Les dictionnaires

une collection de couple cle/valeur

une cle est un indice personnalise (unique)

Declaration

Dictionary<type1, type2> dic = new Dictionary<type1, type2>();

Exemple

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

H & H: Research and Training 22 / 42

Page 41: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Dictionary

C#

Les dictionnaires

une collection de couple cle/valeur

une cle est un indice personnalise (unique)

Declaration

Dictionary<type1, type2> dic = new Dictionary<type1, type2>();

Exemple

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

H & H: Research and Training 22 / 42

Page 42: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Dictionary

C#

Remplir le dictionnaire

fcb.Add(10, "messi");fcb.Add(23, "umtiti");fcb.Add(4, "Rakitic");fcb.Add(9, "Suarez");

Verifier l’appartenance d’une valeur et/ou d’une cle a undictionnaire

Console.WriteLine(fcb.ContainsValue("iniesta"));Console.WriteLine(fcb.ContainsKey(10));

H & H: Research and Training 23 / 42

Page 43: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Dictionary

Parcourir le dictionnaire et afficher le couple (cle,valeur)

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

Console.WriteLine(elt.Key + elt.Value);}

Parcourir le dictionnaire pour afficher les valeurs

foreach (string elt in fcb.Values){

Console.WriteLine(elt);}

Pour recuperer la liste des cles, il faut declarer un KeyCollection

Dictionary<int,string>.KeyCollection clefs = fcb.Keys;foreach (int elt in clefs){

Console.WriteLine(elt);}

H & H: Research and Training 24 / 42

Page 44: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Dictionary

Parcourir le dictionnaire et afficher le couple (cle,valeur)

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

Console.WriteLine(elt.Key + elt.Value);}

Parcourir le dictionnaire pour afficher les valeurs

foreach (string elt in fcb.Values){

Console.WriteLine(elt);}

Pour recuperer la liste des cles, il faut declarer un KeyCollection

Dictionary<int,string>.KeyCollection clefs = fcb.Keys;foreach (int elt in clefs){

Console.WriteLine(elt);}

H & H: Research and Training 24 / 42

Page 45: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Dictionary

Parcourir le dictionnaire et afficher le couple (cle,valeur)

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

Console.WriteLine(elt.Key + elt.Value);}

Parcourir le dictionnaire pour afficher les valeurs

foreach (string elt in fcb.Values){

Console.WriteLine(elt);}

Pour recuperer la liste des cles, il faut declarer un KeyCollection

Dictionary<int,string>.KeyCollection clefs = fcb.Keys;foreach (int elt in clefs){

Console.WriteLine(elt);}

H & H: Research and Training 24 / 42

Page 46: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Dictionary

C#

Pour recuperer la liste des valeurs, il faut declarer un ValueCollection

Dictionary<int,string>.ValueCollection vals = fcb.Values;foreach (string elt in vals){

Console.WriteLine(elt);}

Pour modifier la valeur d’un element selon la cle

fcb[10] = "Rivaldo";foreach (int elt in clefs){

Console.WriteLine(elt);}

H & H: Research and Training 25 / 42

Page 47: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Dictionary

C#

Pour recuperer la liste des valeurs, il faut declarer un ValueCollection

Dictionary<int,string>.ValueCollection vals = fcb.Values;foreach (string elt in vals){

Console.WriteLine(elt);}

Pour modifier la valeur d’un element selon la cle

fcb[10] = "Rivaldo";foreach (int elt in clefs){

Console.WriteLine(elt);}

H & H: Research and Training 25 / 42

Page 48: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Dictionary

C#

Exercice : etant donnee la liste suivante :

ArrayList arrayList = new ArrayList { 2, 5, "Bonjour", true, ’c’, "3", "b", false, 10 };

Ecrire un programme C# qui permet de stocker dans undictionnaire les types contenus dans la liste list ainsi que lenombre d’elements de cette liste appartenant a chaque type.

Resultat attendu :

Int32 = 3Char = 1String = 3Bool =

H & H: Research and Training 26 / 42

Page 49: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Stack

C#

Les piles

une collection appliquant l’algorithme (LIFO, Last In First Out)

impossible donc de supprimer/modifier/lire un element au milieude la liste

Declaration

Stack<type> nomPile = new Stack<type>();

Exemple

Stack<int> pile = new Stack<int>();

H & H: Research and Training 27 / 42

Page 50: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Stack

C#

Empiler : ajouter un element au sommet de la pile

pile.Push(2);pile.Push(1);pile.Push(5);

Parcourir une pile

foreach (int elt in pile)Console.WriteLine(elt);

// affiche 5 1 2

Consulter un element au sommet de la pile

pile.Peek();

H & H: Research and Training 28 / 42

Page 51: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Stack

C#

Empiler : ajouter un element au sommet de la pile

pile.Push(2);pile.Push(1);pile.Push(5);

Parcourir une pile

foreach (int elt in pile)Console.WriteLine(elt);

// affiche 5 1 2

Consulter un element au sommet de la pile

pile.Peek();

H & H: Research and Training 28 / 42

Page 52: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Stack

C#

Empiler : ajouter un element au sommet de la pile

pile.Push(2);pile.Push(1);pile.Push(5);

Parcourir une pile

foreach (int elt in pile)Console.WriteLine(elt);

// affiche 5 1 2

Consulter un element au sommet de la pile

pile.Peek();

H & H: Research and Training 28 / 42

Page 53: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Stack

C#

Depiler : supprimer l’element au sommet de la pile

pile.Pop();

Supprimer tous les elements de la pile

pile.Clear();

H & H: Research and Training 29 / 42

Page 54: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Collections generiques Stack

C#

Depiler : supprimer l’element au sommet de la pile

pile.Pop();

Supprimer tous les elements de la pile

pile.Clear();

H & H: Research and Training 29 / 42

Page 55: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Enumerations

C#

Une enumeration ?

un ensemble de constantes nommees

ne pouvant pas etre declare dans le Main

H & H: Research and Training 30 / 42

Page 56: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Enumerations

Declaration d’une enumeration

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

Par defaut, le premier element a la valeur 0.L’element successif a une valeur augmente de 1.

Exemple

Console.WriteLine(Sports.Tennis); // affiche Tennis

On peut utiliser une enumeration comme un type

Sports sport = Sports.Foot;Console.WriteLine(sport); // affiche Foot

Recuperer la valeur

Console.WriteLine((int)sport); // affiche 0Console.WriteLine((int)Sports.Tennis); // affiche 3

H & H: Research and Training 31 / 42

Page 57: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Enumerations

Declaration d’une enumeration

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

Par defaut, le premier element a la valeur 0.L’element successif a une valeur augmente de 1.

Exemple

Console.WriteLine(Sports.Tennis); // affiche Tennis

On peut utiliser une enumeration comme un type

Sports sport = Sports.Foot;Console.WriteLine(sport); // affiche Foot

Recuperer la valeur

Console.WriteLine((int)sport); // affiche 0Console.WriteLine((int)Sports.Tennis); // affiche 3

H & H: Research and Training 31 / 42

Page 58: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Enumerations

Declaration d’une enumeration

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

Par defaut, le premier element a la valeur 0.L’element successif a une valeur augmente de 1.

Exemple

Console.WriteLine(Sports.Tennis); // affiche Tennis

On peut utiliser une enumeration comme un type

Sports sport = Sports.Foot;Console.WriteLine(sport); // affiche Foot

Recuperer la valeur

Console.WriteLine((int)sport); // affiche 0Console.WriteLine((int)Sports.Tennis); // affiche 3

H & H: Research and Training 31 / 42

Page 59: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Enumerations

Declaration d’une enumeration

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

Par defaut, le premier element a la valeur 0.L’element successif a une valeur augmente de 1.

Exemple

Console.WriteLine(Sports.Tennis); // affiche Tennis

On peut utiliser une enumeration comme un type

Sports sport = Sports.Foot;Console.WriteLine(sport); // affiche Foot

Recuperer la valeur

Console.WriteLine((int)sport); // affiche 0Console.WriteLine((int)Sports.Tennis); // affiche 3

H & H: Research and Training 31 / 42

Page 60: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Enumerations

C#

Declaration d’une enumeration + modification des constantes par defaut

enum Sports { Foot=2, Hand, Hockey=5, Tennis, Basket };

Exemple

Console.WriteLine((int)Sports.Hand); // affiche 3Console.WriteLine((int)Sports.Hockey); // affiche 5Console.WriteLine((int)Sports.Tennis); // affiche 6

H & H: Research and Training 32 / 42

Page 61: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Tuples

C#

Un tuple?

un objet acceptant plusieurs valeurs de type different.

permettant a une methode de retourner plusieurs valeurs sanscreer de classe ou de structure.

ses elements pouvant etre modifies.

impossible d’ajouter un nouvel element, apres creation, ou d’ensupprimer un existant.

H & H: Research and Training 33 / 42

Page 62: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Tuples

C#

Considerons les deux methodes qui permettent de retourner la valeur min oumax

public static int FindMax(int i, int j){

return i > j ? i : j;}

public static int FindMin(int i, int j){

return i < j ? i : j;}

Question

Comment faire pour fusionner les deux methodes sans tout en gardant le memenombre de parametres?

H & H: Research and Training 34 / 42

Page 63: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Tuples

C#

Considerons les deux methodes qui permettent de retourner la valeur min oumax

public static int FindMax(int i, int j){

return i > j ? i : j;}

public static int FindMin(int i, int j){

return i < j ? i : j;}

Question

Comment faire pour fusionner les deux methodes sans tout en gardant le memenombre de parametres?

H & H: Research and Training 34 / 42

Page 64: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

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

}

Une deuxieme ecriture

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

int max = i > j ? i : j;int min = i < j ? i : j;return Tuple.Create(min, max);

}

Question

Comment faire pour acceder aux valeurs du tuple retourne?

H & H: Research and Training 35 / 42

Page 65: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

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

}

Une deuxieme ecriture

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

int max = i > j ? i : j;int min = i < j ? i : j;return Tuple.Create(min, max);

}

Question

Comment faire pour acceder aux valeurs du tuple retourne?

H & H: Research and Training 35 / 42

Page 66: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

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

}

Une deuxieme ecriture

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

int max = i > j ? i : j;int min = i < j ? i : j;return Tuple.Create(min, max);

}

Question

Comment faire pour acceder aux valeurs du tuple retourne?

H & H: Research and Training 35 / 42

Page 67: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Tuples

C#

Pour acceder aux valeurs d’un tuple

var tuple = FindMinMax(2, 3);Console.WriteLine($"Le min de 2 et 3 est : { tuple.Item1 }");// affiche 2

Console.WriteLine($"Le max de 2 et 3 est : { tuple.Item1}");// affiche 3

H & H: Research and Training 36 / 42

Page 68: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Tuples

C#

Remarques

Un tuple accepte au maximum 8 elements.

Les elements d’un tuple sont accessibles avec les Item1, Item2,... Item7.

Le dernier element (le 8 eme element) sera renvoye a l’aide de lapropriete Rest.

Le dernier element est souvent utilise pour imbriquer un autretuple.

Un tuple peut imbriquer d’autres tuples. Cependant, il estrecommande de le placer dans la derniere position.

H & H: Research and Training 37 / 42

Page 69: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Tuples

C#

Considerons le tuple suivant

var t = Tuple.Create(1, 2, 3, 4, 5, 6, 7, 8);

Rest retourne un tuple

Console.WriteLine(t.Rest);// affiche (8)

Pour recuperer la derniere valeur d’un tuple

Console.WriteLine(t.Rest.Item1);// affiche 8

H & H: Research and Training 38 / 42

Page 70: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Tuples

C#

Considerons le tuple suivant

var t = Tuple.Create(1, 2, 3, 4, 5, 6, 7, 8);

Rest retourne un tuple

Console.WriteLine(t.Rest);// affiche (8)

Pour recuperer la derniere valeur d’un tuple

Console.WriteLine(t.Rest.Item1);// affiche 8

H & H: Research and Training 38 / 42

Page 71: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Tuples

C#

Considerons le tuple suivant

var t = Tuple.Create(1, 2, 3, 4, 5, 6, 7, 8);

Rest retourne un tuple

Console.WriteLine(t.Rest);// affiche (8)

Pour recuperer la derniere valeur d’un tuple

Console.WriteLine(t.Rest.Item1);// affiche 8

H & H: Research and Training 38 / 42

Page 72: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

Tuples

C#

Tableaux vs tuples

Un tableau peut etre multidimensionnel mais il est de taille fixe ettype unique.

Un tuple est un regroupent de valeurs non nommes pas forcementde meme type.

On ne peut supprimer un element ni d’un tableau ni d’un tuple.

H & H: Research and Training 39 / 42

Page 73: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

ValueTuples

C#

ValueTuples ?

un tuple acceptant un nombre variable de valeurs de type different(meme plus que 8).

ses elements peuvent etre nommes.

H & H: Research and Training 40 / 42

Page 74: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

ValueTuples

C#

Considerons le ValueTuple suivant

var t = (1, 2, 3, 4, 5, 6, 7, 8, 9);

Pour acceder au dernier element

Console.WriteLine(t.Item9);// affiche 9

H & H: Research and Training 41 / 42

Page 75: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

ValueTuples

C#

Considerons le ValueTuple suivant

var t = (1, 2, 3, 4, 5, 6, 7, 8, 9);

Pour acceder au dernier element

Console.WriteLine(t.Item9);// affiche 9

H & H: Research and Training 41 / 42

Page 76: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

ValueTuples

C#

Il est possible de nommer les membres d’un tuple

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

Pour acceder a un element, on utilise son nom

Console.WriteLine(notes.note1);// affiche 10

Ou la propriete Item

Console.WriteLine(notes.Item1);// affiche 10

H & H: Research and Training 42 / 42

Page 77: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

ValueTuples

C#

Il est possible de nommer les membres d’un tuple

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

Pour acceder a un element, on utilise son nom

Console.WriteLine(notes.note1);// affiche 10

Ou la propriete Item

Console.WriteLine(notes.Item1);// affiche 10

H & H: Research and Training 42 / 42

Page 78: : tableaux, collections, enum´ erations et boucles´...C#: tableaux, collections, enum´ erations et boucles´ Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur

© Achref EL MOUELHI ©

ValueTuples

C#

Il est possible de nommer les membres d’un tuple

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

Pour acceder a un element, on utilise son nom

Console.WriteLine(notes.note1);// affiche 10

Ou la propriete Item

Console.WriteLine(notes.Item1);// affiche 10

H & H: Research and Training 42 / 42