0Pricing
C# Academy · Leçon

Recherches dans les dictionnaires

Accédez rapidement aux paires clé-valeur.

Recherches dans les dictionnaires est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.

Paires clé-valeur

Dictionary<TKey, TValue> associe des clés uniques à des valeurs. Considérez-le comme une table de recherche : fournissez une clé et récupérez rapidement la valeur correspondante.

Il repose sur une table de hachage, donc la recherche d'une valeur par sa clé coûte en moyenne O(1), ce qui est bien plus rapide que le parcours d'une liste.

using System.Collections.Generic;

var ages = new Dictionary<string, int>();
ages["Ann"] = 30;
ages["Bob"] = 25;

Initialiser un dictionnaire

Vous pouvez préremplir un dictionnaire avec un initialiseur de collection. Chaque entrée associe une clé à sa valeur.

Les clés doivent être uniques. Fournir deux fois la même clé dans un initialiseur lève une ArgumentException à l'exécution.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var caps = new Dictionary<string, string> {
            ["FR"] = "Paris",
            ["JP"] = "Tokyo"
        };
        Console.WriteLine(caps["JP"]);
    }
}

Lecture par clé

Utilisez l'indexeur pour lire : dict[key]. Cela s'effectue en O(1) en moyenne.

Mais attention : si la clé est absente, l'indexeur lève KeyNotFoundException. La lecture d'une clé absente est l'un des bogues de dictionnaire les plus courants.

var ages = new Dictionary<string, int> { ["Ann"] = 30 };
int a = ages["Ann"];      // 30
// int b = ages["Zoe"];   // throws KeyNotFoundException

Recherche sûre avec TryGetValue

TryGetValue évite les exceptions. Il renvoie true et définit une variable out lorsque la clé existe, ou false sinon.

C'est la façon idiomatique et sans allocation de rechercher une valeur dont vous ignorez peut-être l'existence.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var ages = new Dictionary<string, int> { ["Ann"] = 30 };
        if (ages.TryGetValue("Ann", out int v))
            Console.WriteLine(v);
    }
}

ContainsKey et valeurs par défaut

ContainsKey vérifie la présence d'une clé sans lire sa valeur, en O(1). Utilisez-le avant une lecture avec l'indexeur lorsque vous avez seulement besoin d'une réponse oui ou non.

Si vous appelez à la fois ContainsKey et l'indexeur, le hachage de la clé est calculé deux fois. TryGetValue ne le fait qu'une seule fois et est donc généralement plus rapide.

var ages = new Dictionary<string, int> { ["Ann"] = 30 };
if (ages.ContainsKey("Ann"))
    System.Console.WriteLine(ages["Ann"]);

Ajout et affectation

L'indexeur dict[key] = value insère une nouvelle paire ou remplace une paire existante. Add(key, value) se contente d'insérer et lève une exception si la clé existe déjà.

Utilisez Add lorsqu'une clé en double doit être considérée comme une erreur, et l'indexeur lorsque le remplacement est acceptable.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var d = new Dictionary<string, int>();
        d["x"] = 1;
        d["x"] = 2;     // overwrite, fine
        Console.WriteLine(d["x"]);
    }
}

Suppression d'éléments

Remove(key) supprime une paire et renvoie true si la clé était présente, en O(1) en moyenne.

Une surcharge renvoie la valeur supprimée via un paramètre out, ce qui est pratique lorsque vous souhaitez supprimer la valeur et l'utiliser en une seule étape.

var d = new Dictionary<string, int> { ["a"] = 1, ["b"] = 2 };
bool removed = d.Remove("a");   // true
bool again = d.Remove("a");     // false

Parcours des paires

Le parcours produit des éléments KeyValuePair<TKey, TValue>. Déstructurez-les en une clé et une valeur pour obtenir un code lisible.

L'ordre d'énumération n'est pas garanti ; ne vous fiez jamais à l'ordre dans lequel les entrées ont été insérées. Utilisez Keys ou Values pour parcourir un seul côté.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var d = new Dictionary<string, int> { ["a"] = 1, ["b"] = 2 };
        foreach (var (key, val) in d)
            Console.WriteLine($"{key}={val}");
    }
}

Comptage avec un dictionnaire

Une utilisation classique consiste à comptabiliser les occurrences. Pour chaque élément, incrémentez son compteur, en partant de zéro s'il est nouveau.

Ce modèle s'exécute en O(n) pour n éléments, car chaque recherche et mise à jour s'effectue en O(1), contre O(n²) si vous parcouriez une liste à chaque fois.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var counts = new Dictionary<char, int>();
        foreach (char c in "banana")
            counts[c] = counts.GetValueOrDefault(c) + 1;
        Console.WriteLine(counts['a']);
    }
}

L'égalité des clés est importante

Les recherches reposent sur GetHashCode et Equals du type de clé. Les types intégrés et string fonctionnent immédiatement.

Pour les clés de classes personnalisées, redéfinissez les deux méthodes (ou utilisez un record), sinon deux clés qui semblent identiques produiront des hachages différents et les recherches échoueront.

var byName = new Dictionary<string, int>(
    System.StringComparer.OrdinalIgnoreCase);
byName["Hi"] = 1;
bool found = byName.ContainsKey("HI"); // true

Choisir un type de valeur

Les valeurs peuvent être de n'importe quel type, y compris des listes. Un Dictionary<string, List<int>> regroupe de nombreuses valeurs sous une même clé.

Lors d'une insertion dans une telle structure, créez la liste interne lors de la première utilisation, puis ajoutez-y l'élément. Vous obtenez ainsi une table de correspondance groupée à valeurs multiples.

var groups = new Dictionary<string, List<int>>();
void Add(string k, int v) {
    if (!groups.TryGetValue(k, out var list))
        groups[k] = list = new List<int>();
    list.Add(v);
}

Vérification rapide

Choisissez la façon la plus sûre de lire une clé potentiellement absente.

Récapitulatif

Dictionary<K,V> fournit des recherches, insertions et suppressions par clé en O(1) en moyenne, grâce à une table de hachage.

Préférez TryGetValue à l'indexeur qui lève une exception, gardez les clés uniques et assurez-vous que les types de clés personnalisés implémentent une égalité et un hachage corrects. L'ordre d'itération n'est pas défini.

Questions Fréquemment Posées

La leçon « Recherches dans les dictionnaires » est-elle gratuite ?

Oui — le texte complet de « Recherches dans les dictionnaires » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Recherches dans les dictionnaires » ?

Accédez rapidement aux paires clé-valeur. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C# Academy ?

Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Recherches dans les dictionnaires » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?

Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Les listes en pratique
  2. Recherches dans les dictionnaires
  3. HashSet et unicité
  4. Choisir une collection
← Retour à C# Academy