Différences
Ci-dessous, les différences entre deux révisions de la page.
| 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> | ||