Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
poo:dictionnaires [2017/08/07 21:07]
admin créée
poo:dictionnaires [2018/03/12 12:44] (Version actuelle)
dskevk [Opération sur les dictionnaires]
Ligne 1: Ligne 1:
 ====== Les dictionnaires ====== ====== Les dictionnaires ======
 +Un dictionnaire est une structure de données possédant des paires de clés/​valeurs. Contrairement au liste, les valeurs ne sont pas identifiables à un index mais à leur clé qui peut être de tout type (string, int, ect...).
 +===== Déclaration et Instanciation =====
 +<​code>​
 +// Création du dictionnaire.
 +Dictionary<​string,​ string> openWith = new Dictionary<​string,​ string>​();​
  
 +// Création du dictionnaire avec une taille définie à 10 dans le but d'​optimiser les performances.
 +Dictionary<​string,​ string> openWith = new Dictionary<​string,​ string>​(10);​
 +
 +</​code>​
 +
 +
 +
 +===== Opération sur les dictionnaires =====
 <​code>​ <​code>​
 +// Ajout de quelques éléments. Il ne peut pas y avoir
 +// deux clefs identiques mais les valeurs peuvent l'​être.
 +openWith.Add("​txt",​ "​notepad.exe"​);​
 +openWith.Add("​bmp",​ "​paint.exe"​);​
 +openWith.Add("​dib",​ "​paint.exe"​);​
 +openWith.Add("​rtf",​ "​wordpad.exe"​);​
 +
 +// La méthode Add lance une exception si
 +// la clef existe déjà.
 +try
 +{
 + openWith.Add("​txt",​ "​winword.exe"​);​
 +}
 +catch (ArgumentException)
 +{
 + Console.WriteLine("​Un élément possède déjà la clef \"​txt\"​."​);​
 +}
 +
 +// Comme pour un tableau, vous pouvez utiliser un indexeur (avec les crochets : '​['​ et '​]'​).
 +// Avec un tableau l'​indexeur est un entier positif tandis
 +// que pour un dictionnaire ce doit être une clef
 +// (donc ici de type string).
 +Console.WriteLine(
 + "La valeur associée à la clef \"​rtf\"​ est {0}.",
 + openWith["​rtf"​]);​
 +
 +// L'​indexeur peut aussi être utilisé en écriture.
 +openWith["​rtf"​] = "​winword.exe";​
 +Console.WriteLine(
 + "La nouvelle valeur associée à la clef \"​rtf\"​ est {0}.",
 + openWith["​rtf"​]);​
 +
 +// Si la clef n'​existe pas déjà, l'​utilisation de l'​indexeur
 +// crée un nouveau couple clef/​valeur.
 +openWith["​doc"​] = "​winword.exe";​
 +
 +// L'​indexeur lance une exception si la clef
 +// n'est pas définie dans le dictionnaire.
 +try
 +{
 + Console.WriteLine(
 + "La valeur associée à la clef \"​tif\"​ est {0}.",
 + openWith["​tif"​]);​
 +}
 +catch (KeyNotFoundException)
 +{
 + Console.WriteLine("​La clef \"​tif\"​ est introuvable."​);​
 +}
 +
 +// Si vous voulez accéder à plusieurs clefs, sans savoir si elles existent,
 +// le plus rapide est d'​utiliser la méthode TryGetValue plutôt
 +// que d'​utiliser des try ... catch.
 +// Si la valeur a pu être récupérée,​ elle est mise dans le paramètre value passé avec out
 +// et la méthode retourne true ; sinon elle retourne false.
 +string value = string.Empty;​
 +if (openWith.TryGetValue("​tif",​ out value))
 +{
 + Console.WriteLine(
 + "La valeur associée à la clef \"​tif\"​ est {0}.",
 + value);
 +}
 +else
 +{
 + Console.WriteLine("​La clef \"​tif\"​ est introuvable."​);​
 +}
 +
 +// La méthode ContainsKey permet de savoir si la clef existe déjà ou non.
 +// Elle retourne true si la clef existe déjà et false sinon.
 +if (!openWith.ContainsKey("​ht"​))
 +{
 + openWith.Add("​ht",​ "​hypertrm.exe"​);​
 + Console.WriteLine(
 + "​Ajout de la clef \"​ht\"​ avec la valeur {0}.",
 + openWith["​ht"​]);​
 +}
 +
 +// La méthode Remove permet de supprimer une paire clef/​valeur.
 +Console.WriteLine("​Suppression de la clef \"​doc\"​ et de la valeur associée."​);​
 +openWith.Remove("​doc"​);​
 +
 +if (!openWith.ContainsKey("​doc"​))
 +{
 + Console.WriteLine("​La clef \"​doc\"​ est introuvable."​);​
 +}
 +
 +// Count indique le nombre de paires stockées.
 +Console.WriteLine(
 + "Ce dictionnaire contient {0} paires.",​
 + openWith.Count);​
 +
 +// La méthode Clear permet de supprimer toutes les paires clef/​valeur.
 +openWith.Clear();​
 +Console.WriteLine(
 + "​Après suppression de toutes les paires, ce dictionnaire contient {0} paires.",​
 + openWith.Count);​
 +
 +// La méthode Remove permet de supprimer une paire de clef/valeur en lui passant la clé en paramètre.
 +// Ici nous souhaitons supprimer la paire : ("​txt",​ "​notepad.exe"​)
 +openWith.Remove("​txt"​);​
  
 </​code>​ </​code>​
Ligne 7: Ligne 119:
  
  
-Parcourir un dictionnaire+===== Parcourir un dictionnaire ​=====
 <​code>​ <​code>​
 Console.WriteLine("​Liste des clefs :"); Console.WriteLine("​Liste des clefs :");
Ligne 41: Ligne 153:
  Console.WriteLine(  Console.WriteLine(
  "​openWith[\"​{0}\"​] vaut {1}",  "​openWith[\"​{0}\"​] vaut {1}",
- kvp.Key,​ + kvp.Key, ​                                // On récupère ici la clé du dictionnaire. 
- kvp.Value);​+ kvp.Value); ​                             // On récupère ici la valeur correspondant à la clé du dictionnaire.
 } }
 </​code>​ </​code>​