Nested HashMap
Teil des Abschnitts Logik & Ablauf der C#-Journey von Coddy — Lektion 53 von 66.
Eine verschachtelte HashMap ist eine HashMap, bei der die Werte selbst HashMaps sind. Dies ist nützlich zur Organisation hierarchischer Daten.
Erstellen Sie eine verschachtelte HashMap, um Noten von Schülern nach Fach zu speichern:
// Create the outer HashMap (student -> subjects)
Dictionary<string, Dictionary<string, int>> studentGrades = new Dictionary<string, Dictionary<string, int>>();
// Create an inner HashMap for a student (subject -> grade)
Dictionary<string, int> alexGrades = new Dictionary<string, int>();
// Add grades to the inner HashMap
alexGrades.Add("Math", 90);
alexGrades.Add("Science", 85);
// Add the inner HashMap to the outer HashMap
studentGrades.Add("Alex", alexGrades);Zugriff auf einen verschachtelten Wert:
// Zugriff auf Alex' Mathe-Note
int mathGrade = studentGrades["Alex"]["Math"]; // Gibt 90 zurückFügen Sie einen weiteren Schüler mit ihren Noten hinzu:
// Eine weitere innere HashMap erstellen
Dictionary<string, int> sarahGrades = new Dictionary<string, int>();
sarahGrades.Add("Math", 95);
sarahGrades.Add("Science", 92);
// Zur äußeren HashMap hinzufügen
studentGrades.Add("Sarah", sarahGrades);Aufgabe
MittelErstellen Sie eine Methode namens AddCourseGrade, die vier Argumente annimmt:
- Ein verschachteltes Dictionary, das Noten der Schüler darstellt:
Dictionary<string, Dictionary<string, int>> grades - Ein Schülername (string)
- Ein Kursname (string)
- Eine Note (int)
Die Methode sollte:
- Wenn der Schüler nicht im Dictionary existiert, einen neuen Eintrag für ihn erstellen
- Den Kurs und die Note zum Datensatz des Schülers hinzufügen
- Wenn der Kurs bereits für diesen Schüler existiert, die Note aktualisieren
- "Added [course] grade for [student]: [grade]" nach dem Hinzufügen/Aktualisieren drucken
Spickzettel
Ein verschachteltes HashMap ist ein HashMap, bei dem die Werte selbst HashMaps sind, nützlich zur Organisation hierarchischer Daten.
Erstellen Sie ein verschachteltes HashMap:
Dictionary<string, Dictionary<string, int>> studentGrades = new Dictionary<string, Dictionary<string, int>>();
// Create inner HashMap
Dictionary<string, int> alexGrades = new Dictionary<string, int>();
alexGrades.Add("Math", 90);
alexGrades.Add("Science", 85);
// Add to outer HashMap
studentGrades.Add("Alex", alexGrades);Zugriff auf verschachtelte Werte:
int mathGrade = studentGrades["Alex"]["Math"]; // Returns 90Fügen Sie einen weiteren Eintrag hinzu:
Dictionary<string, int> sarahGrades = new Dictionary<string, int>();
sarahGrades.Add("Math", 95);
sarahGrades.Add("Science", 92);
studentGrades.Add("Sarah", sarahGrades);Probier es selbst
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
class Program
{
public static void AddCourseGrade(Dictionary<string, Dictionary<string, int>> grades, string student, string course, int grade)
{
// Schreibe deinen Code hier
}
// Ignoriere den Hauptcode, er konvertiert einen String in eine HashMap
static void Main(string[] args)
{
// Prüfe, ob die erste Zeile JSON sein könnte
string firstLine = Console.ReadLine();
Dictionary<string, Dictionary<string, int>> studentGrades = new Dictionary<string, Dictionary<string, int>>();
string student;
string course;
int grade;
// Eingabe im JSON-Format
if (firstLine != null && firstLine.StartsWith("{") && firstLine.EndsWith("}"))
{
try
{
// Bestehende Schülernoten aus JSON parsen
string jsonContent = firstLine.Substring(1, firstLine.Length - 2);
string studentPattern = @"""([^""]+)""\s*:\s*\{([^\}]+)\}";
MatchCollection studentMatches = Regex.Matches(jsonContent, studentPattern);
foreach (Match studentMatch in studentMatches)
{
string studentName = studentMatch.Groups[1].Value;
string coursesJson = studentMatch.Groups[2].Value;
Dictionary<string, int> courseGrades = new Dictionary<string, int>();
string coursePattern = @"""([^""]+)""\s*:\s*(\d+)";
MatchCollection courseMatches = Regex.Matches(coursesJson, coursePattern);
foreach (Match courseMatch in courseMatches)
{
string courseName = courseMatch.Groups[1].Value;
int courseGrade = int.Parse(courseMatch.Groups[2].Value);
courseGrades.Add(courseName, courseGrade);
}
studentGrades.Add(studentName, courseGrades);
}
// Parse student, course, and grade for the operation
string studentInput = Console.ReadLine();
Match studentNameMatch = Regex.Match(studentInput, @"""([^""]+)""");
student = studentNameMatch.Success ? studentNameMatch.Groups[1].Value : studentInput;
string courseInput = Console.ReadLine();
Match courseNameMatch = Regex.Match(courseInput, @"""([^""]+)""");
course = courseNameMatch.Success ? courseNameMatch.Groups[1].Value : courseInput;
grade = int.Parse(Console.ReadLine());
}
catch (Exception ex)
{
Console.WriteLine($"Error parsing JSON input: {ex.Message}");
return;
}
}
else
{
try
{
// Traditional input
student = firstLine;
course = Console.ReadLine();
grade = int.Parse(Console.ReadLine());
// Create an example entry
Dictionary<string, int> johnGrades = new Dictionary<string, int>();
johnGrades.Add("Math", 88);
studentGrades.Add("John", johnGrades);
}
catch (Exception ex)
{
Console.WriteLine($"Error parsing traditional input: {ex.Message}");
return;
}
}
AddCourseGrade(studentGrades, student, course, grade);
}
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety