C-SHARP - 4.5 Dictionnaire

Bonjour a tous et bienvenue dans cette nouvelle video. Dans cette video, nous allons aborder la notion de dictionnaire. Une notion tr s importante en programmation et a maitriser absolument. C est moins utilise que les listes et les tableaux en revanche dans certains cas, les dictionnaires s av rent indispensable. Dictionnaire en anglais se dit dictionnary. Ce qui va differencier ici, c est que les dictionnaires ne vont pas fonctionner avec des index pour cibler des elements comme les tableaux ou listes. Ici, on va parler de cles et valeur. Je vais vous expliquer de suite avec un exemple de fruits et legumes. Ici par exemple la cle sera fruits et la valeur sera par exemple une p che. Et la cle va permettre d effectuer des recherches directes dans les dictionnaires. Donc pour creer un dictionnaire c est tr s simple, je vais faire un var dic = new Dictionary avec un d majuscule. Et ensuite vous utiliser les balises pour preciser le type de la cle et le type de la valeur. Ici a sera string vu que c est un fruit et pareil pour la valeur mais par exemple si on avait un dictionnaire pour repertorier par exemple un genre soit des hommes et des femmes on aurait pu mettre un int ou un booleen pour dire si c est 1 ou true c est l homme et 2 ou false pour dire que c est la femme inversement c est pareil. Et pour terminer vous faites des parenth ses ; Encore une fois j ai mis var ici pour des questions de lisibilite, on aurait tr s bien pu mettre Dictionary ici parce que le type de notre dic c est bien dictionary de string string. On peut ajouter des valeurs dans notre dictionnaire un peu comme une liste. Avec une fonction Add() et vous voyez ici, on doit passer la cle ainsi que la valeur. On reprend notre exemple fruits p che d en haut. On tape Fruits ensuite en dehors des guillemets virgule et on met notre p che. On a vu la 1ere syntaxe pour ajouter des elements dans notre dictionnaire, il en existe une autre. Vous reprenez le nom de votre dictionnaire, ensuite vous mettez des crochets. Et vous donnez la cle, donc nous la cle c est un string donc entre guillemets et je mets legumes. Et pour la valeur je fais = a guillemets haricot par exemple Ok qu est-ce qu on peut observer ? On connait cette syntaxe-la avec les crochets mais d habitude on les utilise pour quoi ? pour des index. Eh bien ici pour le dictionnaire, on ne fonctionne pas par index mais par cle. Donc la, on lui donne une cle. Nous, on a dit que la cle correspondait a legumes donc on lui donne legumes. Donc pour recapituler, jusqu a maintenant on a cree un dictionnaire et on lui a ajouter des valeurs, soit avec la fonction Add, soit en recuperer sa cle. Maintenant pour les afficher comment a se passe ? Bah c est tr s simple, je vais faire un Console.WriteLine(). Et je vais lui dire je souhaite obtenir le fruit qu il y a dans mon dictionnaire, soit je precise mon dictionnaire et entre les crochets je mets la cle fruits. Et si je lance mon programme, j ai bien mon fruit p che qui est affiche. Ici on a pris l exemple de fruits mais imaginez-vous un dictionnaire qui contient les coordonnees de millions de personnes, et qu on a pris pour cle le nom d une personne. Bah on pourra facilement retrouver cette personne en donnant sa cle soit son nom et obtiendra immediatement ses coordonnees. C est tr s pratique contrairement aux listes, vous allez voir la puissance d un dictionnaire juste apr s Avant a, j aimerais voir avec vous qu est ce qui se passe si on met une cle qui n est pas dans notre dictionnaire, qui n existe pas, On va mettre par exemple v tement. Si je lance le programme, eh bien j ai une exception. En gros il m informe que la cle n est pas presente dans le dictionnaire. Et comment je pourrais gerer cette erreur ? Il existe une methode qui verifie si une cle est presente ou non dans un dictionnaire. Et cette methode se nomme ContainsKey. Ici on va dire qu un utilisateur cherche quelque chose on va creer une variable juste ici de type string qu on va appeler search et on va lui affecter la fonction Console.ReadLine pour interagir avec lui, je vais juster ajouter la methode ToLower au cas o il tape une majuscule au debut. Et ici on va faire quoi, on va dire si dans le dictionnaire il y a la cle que l utilisateur a entre alors on affiche la valeur correspondant a la cle sinon on affiche La cle que vous avez entre n est pas dans le dictionnaire Donc ici on fait quoi ? on fait un if parenth ses on met dic.ContainsKey la methode qui permet de voir si une cle est presente dans le dictionnaire et dans les parenth ses on met ce que l utilisateur cherche soit la variable qui contient ce que l utilisateur a taper. Et pour afficher on fait un Console.WriteLine du dictionnaire avec la cle que l utilisateur a entre Et pour terminer, le else va traiter si la cle n est pas presente donc on fait un else accolades a l interieur Console.WriteLine et on affiche Le cle que vous avez taper n est pas presente. Je vais juste faire un petit Console.WriteLine pour dire a l utilisateur d entrer une cle : hop et Si on lance le programme, Entrer une cle : je tape une qui n est pas dans le dictionnaire je vais taper vetement et la le else g re maintenant l exception si maintenant je relance le programme je tape une qui est presente soit legume , j entre et voila on a bien la valeur qui est affilie a la cle. A present supprimons tout a et passons a la suite. On va maintenant comparer la puissance des dictionnaires par rapport aux listes. Je vais creer en rapide un dictionnaire avec comme cles le prenom de personnes et la valeur son age. Soit je vais faire var personnes = new dictionary balise la cle sera de type string vu que c est des noms et cette fois-ci pour la valeur je peux mettre le type int vu que ce seront des ges. Mais je vais laisser en type string pour la suite. Ensuite je vais faire plusieurs Add() personnes.Add parenthseses le nom je mets Jason l age par exemple 26 je vais faire un copier-coller comme a c est plus rapide Je change juste les noms ici je mets Thibaut 23 et le dernier Jibril et 18 Voila. Maintenant si j ai envie d afficher la valeur soit l age d une personne j ai juste a faire un Console.WriteLine du dictionnaire avec une cle comme ceci n est-ce pas ? Maintenant, on va voir ce que a donne en liste. Ici on a deux choses a avoir le nom et son age donc ici vu qu on a deux informations par personnes on va devoir les conserver dans un tableau soit on va faire une liste qui contient des tableaux de 2 elements de type string voila pourquoi juste avant j ai laisse l age en type string car un tableau est fortement type. Donc pour faire a, on va faire un var liste = new List balise et a va tre une liste de quoi ? De tableau de string donc je fais string crochets et parenth ses ; Ensuite pour ajouter je fais un liste.add le premier element on a dit que c etait ici Jason donc la je rajoute quoi ? je rajoute un tableau de string crochets et les accolades pour mettre Jason et son age soit 26 ; Vous voyez a, c est une syntaxe qu on a vu lorsqu on aborder la notion de tableau ici c est bien un tableau de string et ici je ne suis pas obliger de mettre 2 parce que j initialise directement les valeurs dans les accolades. Donc la j ai ma premi re entree et la je vais faire un copier-coller rapide pour faire la m me chose avec les autres. Hop voila j ai termine on peut continuer Maintenant comment je pourrais faire pour trouver la personne que va entrer l utilisateur. Bah il va falloir qu on boucle sur la liste, et une fois que j aurai trouve la personne. Eh bien, je pourrais alors obtenir son ge. Pour boucler je vais faire un for int i = 0; i inferieur a liste.Count, Count pour le nombre d elements dans ma liste. Et i++ ; Ok maintenant, dans le for on va regarder si le nom de la personne c est bien le nom que l utilisateur a entrer. Je vais juste faire un Console.WriteLine en haut pour lui dire d entrer un nom et recreer une variable search qui contient la fonction Console.ReadLine().Si maintenant liste de i soit ici je recuperer le tableau donc 2 elements, moi je veux comparer le nom soit le 1er element du tableau donc l index 0 ici je vais ajouter des crochets pour le recuperer et je mets 0 apr s s il est == au nom que l utilisateur a entrer soit search. Alors j affiche son age, l ge est le deuxi me element donc je mets cette fois-ci 1 entre les crochets. Et on fait un break pour sortir de la boucle s il le trouve. Je lance le programme je tape Jibril et la il m affiche bien son ge. Mais vous allez me dire pourquoi faire tout a ? a revient a la m me chose qu en haut n est-ce pas ? Oui c est vrai cependant il y a une difference fondamentale entre le dictionnaire et la liste. Jason, Thibaut Jibril, et la c est bon c est Jibril alors tu sors. Tandis que pour le dictionnaire, c est different. Ici on n a pas eu besoin de boucler on a juste donner la cle dans le Console.WriteLine() et on a eu un acc s direct a l ge de la personne sans avoir a boucler. Ici on a que 3 personnes mais imaginez on soit sur une base de donnees avec des millions de personnes, a veut dire dans ce cas si on implemente notre algorithme de recherche avec une liste, a serait vraiment tr s lent, car a chaque recherche on serait oblige de faire une boucle, de balayer quasiment toutes les donnees de la liste jusqu a ce qu on trouve la personne et a, ce n est pas tr s optimise et efficace. Par contre, si on implementait notre algorithme de recherche avec un dictionnaire, peu importe le nombre de personnes qu il y a dans la base, on aura toujours un acc s direct qui veut dire que notre programme sera nettement plus rapide et c est la la puissance du dictionnaire. C est tr s important, rappelez-vous que lorsque vous allez manipuler une grosse quantite de donnees et que vous avez besoin de faire des recherches sur ces donnees alors pensez toujours aux dictionnaires, a va compl tement changer les performances de votre programme, que vous soyez sur une application web, mobile peu importe. Comme pour les tableaux et les listes, on verra dans la suite de ce cours des projets auxquels nous devrons utiliser les dictionnaires et faire des programmes nettement plus pousses. En tout cas j esp re que cette video vous a plu et que tout a ete clair pour vous. Je vous dis a la prochaine dans une nouvelle video.