====== 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 ===== // Création du dictionnaire. Dictionary openWith = new Dictionary(); // Création du dictionnaire avec une taille définie à 10 dans le but d'optimiser les performances. Dictionary openWith = new Dictionary(10); ===== Opération sur les dictionnaires ===== // 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"); ===== Parcourir un dictionnaire ===== Console.WriteLine("Liste des clefs :"); // On récupère juste les clefs. Dictionary.KeyCollection myKeyCollection = openWith.Keys; // On parcourt les clefs (qui sont des objets de type string). foreach (string key in myKeyCollection) { Console.WriteLine(key); } // Le \n sert à faire un retour charriot // (donc à sauter une ligne car on était déjà revenus à la ligne avec WriteLine) Console.WriteLine("\nListe des valeurs :"); // On récupère juste les valeurs. Dictionary.ValueCollection myValueCollection = openWith.Values; // On parcourt les valeurs (qui sont des objets de type string) foreach (string value in myValueCollection) { Console.WriteLine(value); } Console.WriteLine("\nListe des paires clef/valeur :"); // Quand on utilise foreach pour énumérer les éléments du dictionnaire, // ces éléments sont récupérés en tant que des objets de type KeyValuePair. foreach (KeyValuePair kvp in openWith) { Console.WriteLine( "openWith[\"{0}\"] vaut {1}", kvp.Key, // On récupère ici la clé du dictionnaire. kvp.Value); // On récupère ici la valeur correspondant à la clé du dictionnaire. }