Menu
Coddy logo textTech

Accéder aux valeurs

Fait partie de la section Logique & Flux du Journey C# de Coddy — leçon 49 sur 66.

En C#, nous utilisons Dictionary<TKey, TValue> comme l'équivalent de HashMap. Après avoir ajouté des éléments à un Dictionary, vous devrez les récupérer.

Créez un Dictionary avec des clés de type string et des valeurs de type int :

Dictionary<string, int> studentScores = new Dictionary<string, int>();

Ajoutez quelques entrées :

studentScores.Add("John", 95);
studentScores.Add("Mary", 88);

Accéder à une valeur en utilisant une clé :

int johnScore = studentScores["John"];

Après l'exécution du code ci-dessus, johnScore contient :

95

Soyez prudent ! Si vous essayez d'accéder à une clé qui n'existe pas, vous obtiendrez une KeyNotFoundException :

// Cela lancera une exception si "Bob" n'est pas dans le dictionnaire
int bobScore = studentScores["Bob"];
challenge icon

Défi

Facile

Créez une méthode nommée GetValueByKey qui prend deux arguments :

  1. Un Dictionary<string, int> (dictionnaire).
  2. Une chaîne de caractères (clé) à rechercher.

La méthode doit essayer d'accéder à la valeur pour la clé donnée et :

  • Si la clé existe, affichez la valeur.
  • Si la clé n'existe pas, affichez "Key not found".

Aide-mémoire

Créez un Dictionary avec des clés string et des valeurs int :

Dictionary<string, int> studentScores = new Dictionary<string, int>();

Ajoutez des entrées au Dictionary :

studentScores.Add("John", 95);
studentScores.Add("Mary", 88);

Accédez à une valeur en utilisant une clé :

int johnScore = studentScores["John"];

Accéder à une clé inexistante lèvera une KeyNotFoundException :

// Cela lèvera une exception si "Bob" n'est pas dans le dictionnaire
int bobScore = studentScores["Bob"];

Essayez vous-même

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

class Program
{
    public static void GetValueByKey(Dictionary<string, int> dictionary, string key)
    {
        // Écrire le code ici
    }
    
    static void Main(string[] args)
    {
        // Lire un dictionnaire au format JSON : {"key1":value1,"key2":value2}
        string dictionaryInput = Console.ReadLine();
        string key = Console.ReadLine();
        
        Dictionary<string, int> dictionary = new Dictionary<string, int>();
        
        // Analyser la chaîne d'entrée pour créer un dictionnaire
        if (!string.IsNullOrEmpty(dictionaryInput))
        {
            try
            {
                // Vérifier si l'entrée est au format JSON
                if (dictionaryInput.StartsWith("{") && dictionaryInput.EndsWith("}"))
                {
                    // Supprimer les accolades
                    string jsonContent = dictionaryInput.Substring(1, dictionaryInput.Length - 2);
                    
                    // Diviser par les virgules qui ne sont pas entre guillemets
                    string pattern = @",(?=(?:[^""]*""[^""]*"")*[^""]*$)";
                    string[] entries = Regex.Split(jsonContent, pattern);
                    
                    foreach (string entry in entries)
                    {
                        // Extraire la clé et la valeur à l'aide d'une regex
                        Match match = Regex.Match(entry, @"""([^""]+)""\s*:\s*(\d+)");
                        if (match.Success)
                        {
                            string keyMatch = match.Groups[1].Value;
                            int valueMatch = int.Parse(match.Groups[2].Value);
                            dictionary.Add(keyMatch, valueMatch);
                        }
                    }
                }
                // Handle the original format "key1:value1,key2:value2" as fallback
                else
                {
                    string[] pairs = dictionaryInput.Split(',');
                    foreach (string pair in pairs)
                    {
                        string[] keyValue = pair.Split(':');
                        if (keyValue.Length == 2)
                        {
                            dictionary.Add(keyValue[0], int.Parse(keyValue[1]));
                        }
                    }
                }
                
                GetValueByKey(dictionary, key);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error parsing input: {ex.Message}");
            }
        }
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux