0% ont trouvé ce document utile (0 vote)
167 vues59 pages

C# : Tableaux et Collections Essentiels

Le document décrit les tableaux, collections et boucles en C#. Il explique ce que sont les tableaux, leur déclaration et utilisation, ainsi que les opérations possibles comme le tri. Le document présente ensuite les différentes collections comme les listes, files, piles et dictionnaires. Finalement, il aborde brièvement les énumérations et boucles.

Transféré par

Tuni Games
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)
167 vues59 pages

C# : Tableaux et Collections Essentiels

Le document décrit les tableaux, collections et boucles en C#. Il explique ce que sont les tableaux, leur déclaration et utilisation, ainsi que les opérations possibles comme le tri. Le document présente ensuite les différentes collections comme les listes, files, piles et dictionnaires. Finalement, il aborde brièvement les énumérations et boucles.

Transféré par

Tuni Games
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# : tableaux, collections, énumérations et boucles

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 / 38


Plan

1 Introduction
2 Les tableaux
3 Les collections
4 Les collections génériques
Les listes
Les tableaux vs les listes
Un tableau ou une liste multi-type ?
Les dictionnaires
Les piles
5 Les énumérations
6 Les boucles

H & H: Research and Training 2 / 38


Introduction

Introduction

Les boucles et les ensembles de valeurs


Les boucles simplifie l’écriture d’un bloc de code qui se répète
dans un programme
for, foreach et .ForEach que pour les ensembles
while
do ... while

Une variable permet de stocker une seule valeur à la fois. Mais il


existe d’autres structures en C# qui permettent de stocker
plusieurs valeurs telles que
Les tableaux
Les collections
Les énumérations

H & H: Research and Training 3 / 38


Introduction

Introduction

Dans ce cours
La famille for sera traitée dans les différentes sections sur les
ensembles
while et do ... while dans la dernière section

H & H: Research and Training 4 / 38


Les tableaux

Les tableaux

Les tableaux, c’est quoi ?


une variable
contenant un ensemble de valeurs
du même type
et dont le nombre (de valeurs) est fixé à la déclaration

H & H: Research and Training 5 / 38


Les tableaux

Les tableaux
Déclaration
type[] nomTableau = new type[nbrElement];

H & H: Research and Training 6 / 38


Les tableaux

Les tableaux
Déclaration
type[] nomTableau = new type[nbrElement];

Exemple
int[] tab = new int[3];

H & H: Research and Training 6 / 38


Les tableaux

Les tableaux
Déclaration
type[] nomTableau = new type[nbrElement];

Exemple
int[] tab = new int[3];

H & H: Research and Training 6 / 38


Les tableaux

Les tableaux
Déclaration
type[] nomTableau = new type[nbrElement];

Exemple
int[] tab = new int[3];

Utilisation
Tous les éléments du tableau sont initialisés à 0.
tab[i] : permet d’accéder à l’élément d’indice i du tableau
Le premier élément d’un tableau est d’indice 0.
On ne peut dépasser la taille initiale d’un tableau ni changer le
type déclaré.
H & H: Research and Training 6 / 38
Les tableaux

Les tableaux

Déclaration + initialisation
int[] tab = new int[] { 3, 5, 4 };

H & H: Research and Training 7 / 38


Les tableaux

Les tableaux

Déclaration + initialisation
int[] tab = new int[] { 3, 5, 4 };

On peut aussi utiliser le raccourci suivant


int[] tab = { 3, 5, 4 };

H & H: Research and Training 7 / 38


Les tableaux

Les tableaux

Déclaration + initialisation
int[] tab = new int[] { 3, 5, 4 };

On peut aussi utiliser le raccourci suivant


int[] tab = { 3, 5, 4 };

Cette écriture déclenche un IndexOutOfRangeException


tab[3] = 2;

H & H: Research and Training 7 / 38


Les tableaux

Les tableaux

Parcourir un tableau avec un for


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

H & H: Research and Training 8 / 38


Les tableaux

Les tableaux

Parcourir un tableau avec un for


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

Parcourir un tableau avec un foreach


foreach (int n in tab)
{
[Link](n);
}

H & H: Research and Training 8 / 38


Les tableaux

Les tableaux
Déclaration d’un tableau à deux dimensions
type[,] nomTableau = new type[nbLignes, nrColonnes];
Déclaration + initialisation
int[,] tab2dim = new int[,]
{
{1, 2},
{3, 4}
};
Ou
int[,] tab2dim =
{
{1, 2},
{3, 4}
};

H & H: Research and Training 9 / 38


Les tableaux

Les tableaux
Parcourir un tableau à deux dimensions
foreach (int n in tab2dim)
{
[Link](n);
}

H & H: Research and Training 10 / 38


Les tableaux

Les tableaux
Parcourir un tableau à deux dimensions
foreach (int n in tab2dim)
{
[Link](n);
}

Ou
for (int i = 0; i <2; i++)
for (int j = 0; j < 2; j++)
[Link](tab2dim[i,j]);

H & H: Research and Training 10 / 38


Les tableaux

Les tableaux
Parcourir un tableau à deux dimensions
foreach (int n in tab2dim)
{
[Link](n);
}

Ou
for (int i = 0; i <2; i++)
for (int j = 0; j < 2; j++)
[Link](tab2dim[i,j]);

Ne pas confondre tab[,] avec tab[][] qui veut dire un tableau de


tableaux.
H & H: Research and Training 10 / 38
Les tableaux

Les tableaux
Trier un tableau (unidimensionnel)
[Link](tab);

Autres opérations sur les tableaux


[Link](tab, n, m) : supprime les m valeurs (et non
pas les éléments) du tableau en commençant par l’élément
d’indice n. (il existe aussi reverse pour inverser l’ordre,...)
[Link](tab, n)) : retourne l’indice de la première
apparition de la valeur n dans le tableau tab. (il existe aussi
LastIndex, Exists...)
[Link](ref tab, n) : réduit le nombre d’élément de
tab au n premier élément
...
H & H: Research and Training 11 / 38
Les collections

Les collections

Les collections, c’est quoi ?


sont des objets
permettent de regrouper et gérer plusieurs objets de taille et/ou
type dynamiques
(des tableaux multi-types extensibles)

H & H: Research and Training 12 / 38


Les collections

Les collections

Quelques collections c#
ArrayList : tableau dynamique
BitArray : tableau statique de booléens
Queue : file appliquant le principe FIFO (First In First Out)
Hashtable : collection de couple clé/valeur
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 13 / 38


Les collections

Les collections

Pour utiliser une liste, il faut importer le namespace


using [Link];

H & H: Research and Training 14 / 38


Les collections

Les collections

Pour utiliser une liste, il faut importer le namespace


using [Link];

Exemple avec BitArray


BitArray b = new BitArray(2);
[Link](0, true);
[Link](1, false);
[Link](2, true);

H & H: Research and Training 14 / 38


Les collections

Les collections

Pour utiliser une liste, il faut importer le namespace


using [Link];

Exemple avec BitArray


BitArray b = new BitArray(2);
[Link](0, true);
[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 14 / 38


Les collections

Les collections

Exemple avec Queue


Queue q = new Queue();
[Link](2);
[Link](3);
[Link]("bonjour");
[Link](5);
[Link]();

foreach (var o in q)
[Link](o);

H & H: Research and Training 15 / 38


Les collections

Les collections

Exemple avec Queue


Queue q = new Queue();
[Link](2);
[Link](3);
[Link]("bonjour");
[Link](5);
[Link]();

foreach (var o in q)
[Link](o);

Affiche 3 bonjour 5

H & H: Research and Training 15 / 38


Les collections

Les collections

Exemple avec ArrayList


ArrayList arrayList = new ArrayList();
[Link](2);
[Link]("Bonjour");
[Link](’c’);
[Link](8);
[Link](’c’);
[Link](1);
foreach (var o in arrayList)
[Link](o);

H & H: Research and Training 16 / 38


Les collections

Les collections

Exemple avec ArrayList


ArrayList arrayList = new ArrayList();
[Link](2);
[Link]("Bonjour");
[Link](’c’);
[Link](8);
[Link](’c’);
[Link](1);
foreach (var o in arrayList)
[Link](o);

Affiche 2 8

H & H: Research and Training 16 / 38


Les collections génériques

Les collections
Les collections génériques, c’est quoi ?

sont des collections

avec précision de type, mais de taille dynamique

(des tableaux extensibles)

H & H: Research and Training 17 / 38


Les collections génériques

Les collections
Les collections génériques, c’est quoi ?

sont des collections

avec précision de type, mais de taille dynamique

(des tableaux extensibles)

Collections

List Dictionary Stack

H & H: Research and Training 17 / 38


Les collections génériques

Les collections

Pourquoi utiliser les collections génériques ?


Pour
imposer un type pour tous les éléments de la collection
éviter d’avoir des exceptions si le type attendu ne correspond pas
au type d’un élément
éviter de faire de conversions inutiles
...

H & H: Research and Training 18 / 38


Les collections génériques Les listes

Les listes
Pour utiliser une liste, il faut importer le namespace
using [Link];

Déclaration
List <type> nomListe = new List<type>();

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

Déclaration + initialisation
List <string> voitures = new List<string> {"Citroen"
, "Ford", "Peugeot", "Mercedes"};

H & H: Research and Training 19 / 38


Les collections génériques Les listes

Les listes

Ajout d’un élément


[Link]("Renault");

Accès à un élément du tableau en lecture ou en écriture


voitures[3] = "Volkswagen"; // correct
[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 20 / 38


Les collections génériques Les listes

Les tableaux
Parcourir un tableau avec un for
for (int i = 0; i < [Link]-1; i++)
[Link](voitures[i]);
// Count retourne la taille exacte du tableau
// Atttention à l’utilisation de Capacity qui retourne le
plus petit multiple de 4 supérieur au égal à la
taille réelle de la liste

Parcourir un tableau avec un foreach


foreach (var voiture in voitures)
{
[Link](voiture);
}

Parcourir un tableau avec un .ForEach


[Link](elt => [Link](elt));
H & H: Research and Training 21 / 38
Les collections génériques Les listes

Les tableaux
Autres méthodes sur les listes
RemoveAt(n) : supprime d’une liste l’élément d’indice n (il existe
aussi Remove et RemoveAll)
IndexOf(n) : retourne l’indice de la première apparition de la
valeur n dans une liste
Contains(n) : retourne true si n appartient à la liste
Find(elt => condition) : retourne le premier élément de la
liste qui 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 22 / 38
Les collections génériques Les listes

Les tableaux vs les listes

Quoi choisir ?
Un tableau peut être multidimensionnel mais il est de taille fixe.
Une liste est unidimensionnel mais elle est de taille variable.
On ne peut supprimer un élément situé au début ou au milieu d’un
tableau.

H & H: Research and Training 23 / 38


Les collections génériques Les listes

Les tableaux
Les tableaux
object[] obj = new object[2];
obj[0] = "chaine";
obj[1] = 2;
foreach (object elt in obj)
{
[Link](elt );
}
Les listes
List<object> list = new List<object>();
[Link]("chaine");
[Link](2);
foreach (object elt in list)
{
[Link](elt );
}
H & H: Research and Training 24 / 38
Les collections génériques Les dictionnaires

Les dictionnaires

Les dictionnaires
une collection de couple clé/valeur
une clé est un indice personnalisé (unique)

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

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

H & H: Research and Training 25 / 38


Les collections génériques Les dictionnaires

Les dictionnaires

Remplir le dictionnaire
[Link](10, "messi");
[Link](23, "umtiti");
[Link](4, "Rakitic");
[Link](9, "Suarez");

Vérifier l’appartenance d’une valeur et/ou d’une clé à un


dictionnaire
[Link]([Link]("iniesta"));
[Link]([Link](10));

H & H: Research and Training 26 / 38


Les collections génériques Les dictionnaires

Les dictionnaires
Parcourir le dictionnaire et afficher le couple (clé,valeur)
foreach (KeyValuePair<int,string> elt in fcb)
[Link]([Link] + [Link]);

H & H: Research and Training 27 / 38


Les collections génériques Les dictionnaires

Les dictionnaires
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


foreach (string elt in [Link])
[Link](elt);

H & H: Research and Training 27 / 38


Les collections génériques Les dictionnaires

Les dictionnaires
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


foreach (string elt in [Link])
[Link](elt);

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 27 / 38


Les collections génériques Les dictionnaires

Les dictionnaires

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 & H: Research and Training 28 / 38


Les collections génériques Les dictionnaires

Les dictionnaires

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

Pour modifier la valeur d’un élément selon la clé


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

H & H: Research and Training 28 / 38


Les collections génériques Les piles

Les piles

Les piles
une collection appliquant l’algorithme (LIFO, Last In First Out)
impossible donc de supprimer/modifier/lire un élément au milieu
de la liste

Déclaration
Stack<type> nomPile = new Stack<type>();

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

H & H: Research and Training 29 / 38


Les collections génériques Les piles

Les piles

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


[Link](2);
[Link](1);
[Link](5);

H & H: Research and Training 30 / 38


Les collections génériques Les piles

Les piles

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


[Link](2);
[Link](1);
[Link](5);

Parcourir une pile


foreach (int elt in pile)
[Link](elt);
// affiche 5 1 2

H & H: Research and Training 30 / 38


Les collections génériques Les piles

Les piles

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


[Link](2);
[Link](1);
[Link](5);

Parcourir une pile


foreach (int elt in pile)
[Link](elt);
// affiche 5 1 2

Consulter un élément au sommet de la pile


[Link]();

H & H: Research and Training 30 / 38


Les collections génériques Les piles

Les piles

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


[Link]();

H & H: Research and Training 31 / 38


Les collections génériques Les piles

Les piles

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


[Link]();

Supprimer tous les éléments de la pile


[Link]();

H & H: Research and Training 31 / 38


Les énumérations

Les énumérations

Une énumération, c’est quoi ?

un ensemble de constantes nommées


ne pouvant pas être déclaré dans le Main

H & H: Research and Training 32 / 38


Les énumérations

Les é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
[Link]([Link]); // affiche Tennis

On peut utiliser une énumération comme un type


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 33 / 38
Les énumérations

Les énumérations

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


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

Exemple
[Link]((int)[Link]); // affiche 3
[Link]((int)[Link]); // affiche 5
[Link]((int)[Link]); // affiche 6

H & H: Research and Training 34 / 38


Les boucles

Les boucles
Syntaxe while
while (condition) // tant que l’expression logique
est vraie
{
// ce traitement est fait
}

Syntaxe do while
do // répéter
{
// ce traitement
}
while (condition); // tant que l’expression logique
est vraie
Attention aux boucles infinies, pensez à une condition d’arrêt
H & H: Research and Training 35 / 38
Les boucles

Les boucles

Remarques

Dans ces structures itératives, on peut utiliser :


break : pour quitter la boucle
continue : pour ignorer l’itération courante

H & H: Research and Training 36 / 38


Les boucles

Les boucles

Exemple avec break


int j = 5;
do
{
[Link](j);
if (j == 3)
break;
j--;
}
while (j > 0);

H & H: Research and Training 37 / 38


Les boucles

Les boucles

Exemple avec break


int j = 5;
do
{
[Link](j);
if (j == 3)
break;
j--;
}
while (j > 0);

Affichage : 5 4 3

H & H: Research and Training 37 / 38


Les boucles

Les boucles

Exemple avec continue


int j = 5;
while (j > 0)
{
if (j == 3)
{
j--;
continue;
}
j--;
[Link](j);
}

H & H: Research and Training 38 / 38


Les boucles

Les boucles

Exemple avec continue


int j = 5;
while (j > 0)
{
if (j == 3)
{
j--;
continue;
}
j--;
[Link](j);
}

Affichage : 4 3 1
H & H: Research and Training 38 / 38

Vous aimerez peut-être aussi