Verschachtelte Maps
Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 31 von 65.
Manchmal müssen Sie Daten in einer komplexeren, hierarchischen Struktur organisieren als in einem einfachen Schlüssel-Wert-Paar. Verschachtelte Maps ermöglichen es Ihnen, Maps als Werte innerhalb anderer Maps zu speichern, wodurch mehrere Ebenen der Datenorganisation entstehen.
Eine verschachtelte Map ist einfach eine Map, bei der die Werte selbst Map-Objekte sind. Diese Struktur ist perfekt dafür geeignet, Daten darzustellen, die Kategorien und Unterkategorien haben, wie zum Beispiel Benutzerprofile mit mehreren Details oder Produktkataloge mit verschiedenen Attributen.
Map<String, Map<String, dynamic>> userProfiles = {
'alice': {
'email': 'alice@example.com',
'age': 28
},
'bob': {
'email': 'bob@example.com',
'age': 32
}
};
print(userProfiles['alice']['email']); // alice@example.com
print(userProfiles['bob']['age']); // 32Um auf Daten in einer verschachtelten Map zuzugreifen, verwenden Sie mehrere eckige Klammern. Der erste Satz greift auf den Schlüssel der äußeren Map zu, und der zweite Satz greift auf den Schlüssel der inneren Map zu. Diese zweistufige Struktur macht es einfach, verwandte Informationen zu gruppieren und sie gleichzeitig organisiert und zugänglich zu halten.
Aufgabe
EinfachErstellen Sie ein Programm, das das Mitarbeiterverzeichnis-System eines Unternehmens verwaltet und verschachtelte Maps verwendet, um detaillierte Mitarbeiterinformationen zu speichern. Ihr Programm sollte:
- Einen String-Input einlesen, der den Firmennamen darstellt
- Mehrere Sätze von Eingaben einlesen, die Mitarbeiterdaten darstellen (die Eingabe endet, wenn Sie
"employees_done"erhalten). Jeder Mitarbeiter hat:- Mitarbeiter-ID (String)
- Name (String)
- Abteilung (String)
- Gehalt (String, der in einen Integer umgewandelt werden muss)
- Jahre an Erfahrung (String, der in einen Integer umgewandelt werden muss)
- Einen String-Input einlesen, der eine nachzuschlagende Mitarbeiter-ID darstellt
- Eine verschachtelte Map erstellen, in der jede Mitarbeiter-ID ein Schlüssel ist und der Wert eine weitere Map ist, die die Details des Mitarbeiters enthält
- Auf spezifische Mitarbeiterinformationen über den verschachtelten Map-Zugriff zugreifen und diese anzeigen
- Abteilungsstatistiken berechnen und den Bericht des Mitarbeiterverzeichnisses in dem unten gezeigten exakten Format ausgeben
Wenn zum Beispiel der Firmenname "TechCorp Solutions" ist, die Mitarbeiterdaten "EMP001" mit Name "Alice Johnson", Abteilung "Engineering", Gehalt 75000, Erfahrung 5, "EMP002" mit Name "Bob Smith", Abteilung "Marketing", Gehalt 60000, Erfahrung 3, "EMP003" mit Name "Carol Davis", Abteilung "Engineering", Gehalt 80000, Erfahrung 7 enthalten und die nachzuschlagende Mitarbeiter-ID "EMP001" ist, sollte Ihr Programm Folgendes ausgeben:
Company: TechCorp Solutions
Employee Directory: {EMP001: {name: Alice Johnson, department: Engineering, salary: 75000, experience: 5}, EMP002: {name: Bob Smith, department: Marketing, salary: 60000, experience: 3}, EMP003: {name: Carol Davis, department: Engineering, salary: 80000, experience: 7}}
Employee Lookup (EMP001):
Name: Alice Johnson
Department: Engineering
Salary: $75000
Experience: 5 years
Department Analysis:
Engineering employees: 2
Marketing employees: 1
Total employees: 3
Average salary: $71666
Status: Employee directory processed successfullyWenn der Firmenname "Global Industries" ist, die Mitarbeiterdaten "E100" mit Name "David Wilson", Abteilung "Sales", Gehalt 55000, Erfahrung 4, "E101" mit Name "Emma Brown", Abteilung "HR", Gehalt 65000, Erfahrung 6 enthalten und die nachzuschlagende Mitarbeiter-ID "E101" ist, sollte Ihr Programm Folgendes ausgeben:
Company: Global Industries
Employee Directory: {E100: {name: David Wilson, department: Sales, salary: 55000, experience: 4}, E101: {name: Emma Brown, department: HR, salary: 65000, experience: 6}}
Employee Lookup (E101):
Name: Emma Brown
Department: HR
Salary: $65000
Experience: 6 years
Department Analysis:
Sales employees: 1
HR employees: 1
Total employees: 2
Average salary: $60000
Status: Employee directory processed successfullyWenn der Firmenname "StartupHub" ist, die Mitarbeiterdaten "S001" mit Name "Frank Miller", Abteilung "Development", Gehalt 70000, Erfahrung 2, "S002" mit Name "Grace Lee", Abteilung "Design", Gehalt 58000, Erfahrung 3, "S003" mit Name "Henry Chen", Abteilung "Development", Gehalt 72000, Erfahrung 4, "S004" mit Name "Ivy Taylor", Abteilung "Marketing", Gehalt 62000, Erfahrung 5 enthalten und die nachzuschlagende Mitarbeiter-ID "S003" ist, sollte Ihr Programm Folgendes ausgeben:
Company: StartupHub
Employee Directory: {S001: {name: Frank Miller, department: Development, salary: 70000, experience: 2}, S002: {name: Grace Lee, department: Design, salary: 58000, experience: 3}, S003: {name: Henry Chen, department: Development, salary: 72000, experience: 4}, S004: {name: Ivy Taylor, department: Marketing, salary: 62000, experience: 5}}
Employee Lookup (S003):
Name: Henry Chen
Department: Development
Salary: $72000
Experience: 4 years
Department Analysis:
Development employees: 2
Design employees: 1
Marketing employees: 1
Total employees: 4
Average salary: $65500
Status: Employee directory processed successfullyIhr Programm muss eine verschachtelte Map-Struktur erstellen, bei der die äußere Map Mitarbeiter-IDs als Schlüssel verwendet und jeder Wert eine innere Map ist, die "name", "department", "salary" und "experience" als Schlüssel enthält. Verwenden Sie den verschachtelten Map-Zugriff mit doppelten eckigen Klammern, um spezifische Mitarbeiterinformationen abzurufen. Zählen Sie die Mitarbeiter nach Abteilung und berechnen Sie das Durchschnittsgehalt, indem Sie die Summe aller Gehälter durch die Anzahl der Mitarbeiter teilen. Das Eingabeformat ist: Firmenname, dann Sätze von fünf Werten (Mitarbeiter-ID, Name, Abteilung, Gehalt, Erfahrung), die mit "employees_done" enden, gefolgt von der nachzuschlagenden Mitarbeiter-ID.
Spickzettel
Verschachtelte Maps ermöglichen es Ihnen, Maps als Werte innerhalb anderer Maps zu speichern und so hierarchische Datenstrukturen zu erstellen:
Map<String, Map<String, dynamic>> userProfiles = {
'alice': {
'email': 'alice@example.com',
'age': 28
},
'bob': {
'email': 'bob@example.com',
'age': 32
}
};Greifen Sie auf verschachtelte Map-Daten mit mehreren eckigen Klammern zu:
print(userProfiles['alice']['email']); // alice@example.com
print(userProfiles['bob']['age']); // 32Die erste Klammer greift auf den Schlüssel der äußeren Map zu, die zweite Klammer auf den Schlüssel der inneren Map.
Probier es selbst
import 'dart:io';
void main() {
// Firmennamen lesen
String? companyName = stdin.readLineSync();
// Verschachtelte Map für das Mitarbeiterverzeichnis initialisieren
Map<String, Map<String, dynamic>> employeeDirectory = {};
// Mitarbeiterdaten lesen bis "employees_done"
while (true) {
String? input = stdin.readLineSync();
if (input == "employees_done") {
break;
}
String employeeId = input!;
String? name = stdin.readLineSync();
String? department = stdin.readLineSync();
String? salaryStr = stdin.readLineSync();
String? experienceStr = stdin.readLineSync();
// Gehalt und Erfahrung in Ganzzahlen umwandeln
int salary = int.parse(salaryStr!);
int experience = int.parse(experienceStr!);
// TODO: Verschachtelte Map-Struktur für jeden Mitarbeiter erstellen und zum Verzeichnis hinzufügen
}
// Mitarbeiter-ID zum Nachschlagen lesen
String? lookupId = stdin.readLineSync();
// TODO: Schreiben Sie Ihren Code unten, um:
// 1. Firmennamen und Mitarbeiterverzeichnis anzuzeigen
// 2. Spezifische Mitarbeiterinformationen nachschlagen und anzeigen
// 3. Abteilungsstatistiken berechnen
// 4. Durchschnittsgehalt berechnen
// 5. Den vollständigen Bericht im erforderlichen Format ausgeben
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittene Listenmanipulation
Listen-Eigenschaften: first & lastListen-Status: isEmpty & isNotEmptyEine Liste umkehrenHinzufügen zu einer Liste: insertElemente aus Liste entfernen: removeWhereSuchen in einer Liste: indexOfEine Liste sortierenEine Liste mischenZusammenfassung – Listen-Organizer4Fortgeschrittene Map-Manipulation
Über eine Map iterierenPrüfen auf Schlüssel und WerteMap-Eigenschaften: keys & valuesBedingtes Hinzufügen: putIfAbsentEinträge aus einer Map entfernenVerschachtelte MapsRückblick – Inventar-Update7Fortgeschrittene Funktionen
Anonyme FunktionenFunktionen als Argumente übergebenClosures verstehenEinführung in die RekursionRekursive Funktion: CountdownRekursive Funktion: FakultätZusammenfassung – List Processor10Abschluss-Herausforderungen
Herausforderung: NotensortiererHerausforderung: VokalzählerHerausforderung: FizzBuzz2Funktionale Listenoperationen
Transformieren mit 'map'Filtern mit 'where''.toList()' verwendenBedingungen prüfen mit 'any'Bedingungen mit 'every'Suchen mit 'firstWhere'Zusammenfassung – Datenfilterung3Sets
Was ist ein Set?Ein Set erstellenHinzufügen und Entfernen in SetsPrüfen auf Elemente in einem SetEine Liste in ein Set umwandelnSet-VereinigungSet-SchnittmengeSet-DifferenzRückblick – Einzigartige Gästeliste