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