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
EinfachErstelle ein Programm, das das Mitarbeiterverzeichnissystem eines Unternehmens mithilfe verschachtelter Maps verwaltet, um detaillierte Mitarbeiterinformationen zu speichern. Dein Programm sollte:
- Eine String-Eingabe lesen, die den Unternehmensnamen darstellt
- Mehrere Eingabesätze lesen, die Mitarbeiterdaten darstellen (die Eingabe endet, sobald du
"employees_done"erhältst). Jeder Mitarbeiter umfasst:- Mitarbeiter-ID (String)
- Name (String)
- Abteilung (String)
- Gehalt (String, der in eine Ganzzahl umgewandelt werden muss)
- Berufserfahrung in Jahren (String, der in eine Ganzzahl umgewandelt werden muss)
- Eine String-Eingabe lesen, die eine nachzuschlagende Mitarbeiter-ID darstellt
- Eine verschachtelte Map erstellen, in der jede Mitarbeiter-ID ein Schlüssel ist und der Wert eine weitere Map mit den Details des Mitarbeiters ist
- Bestimmte Mitarbeiterinformationen mithilfe des Zugriffs auf verschachtelte Maps abrufen und anzeigen
- Abteilungsstatistiken berechnen und den Bericht des Mitarbeiterverzeichnisses exakt im unten gezeigten Format ausgeben
Wenn beispielsweise der Unternehmensname "TechCorp Solutions" lautet, die Mitarbeiterdaten "EMP001" mit dem Namen "Alice Johnson", der Abteilung "Engineering", dem Gehalt 75000 und einer Berufserfahrung von 5 Jahren, "EMP002" mit dem Namen "Bob Smith", der Abteilung "Marketing", dem Gehalt 60000 und einer Berufserfahrung von 3 Jahren, "EMP003" mit dem Namen "Carol Davis", der Abteilung "Engineering", dem Gehalt 80000 und einer Berufserfahrung von 7 Jahren enthalten und die nachzuschlagende Mitarbeiter-ID "EMP001" ist, sollte dein 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 Unternehmensname "Global Industries" lautet, die Mitarbeiterdaten "E100" mit dem Namen "David Wilson", der Abteilung "Sales", dem Gehalt 55000 und einer Berufserfahrung von 4 Jahren sowie "E101" mit dem Namen "Emma Brown", der Abteilung "HR", dem Gehalt 65000 und einer Berufserfahrung von 6 Jahren enthalten und die nachzuschlagende Mitarbeiter-ID "E101" ist, sollte dein 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 Unternehmensname "StartupHub" lautet, die Mitarbeiterdaten "S001" mit dem Namen "Frank Miller", der Abteilung "Development", dem Gehalt 70000 und einer Berufserfahrung von 2 Jahren, "S002" mit dem Namen "Grace Lee", der Abteilung "Design", dem Gehalt 58000 und einer Berufserfahrung von 3 Jahren, "S003" mit dem Namen "Henry Chen", der Abteilung "Development", dem Gehalt 72000 und einer Berufserfahrung von 4 Jahren, "S004" mit dem Namen "Ivy Taylor", der Abteilung "Marketing", dem Gehalt 62000 und einer Berufserfahrung von 5 Jahren enthalten und die nachzuschlagende Mitarbeiter-ID "S003" ist, sollte dein 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 successfullyDein Programm muss eine verschachtelte Map-Struktur erstellen, in 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. Verwende den Zugriff auf verschachtelte Maps mit doppelten eckigen Klammern, um bestimmte Mitarbeiterinformationen abzurufen. Zähle die Mitarbeiter nach Abteilung und berechne das Durchschnittsgehalt, indem du die gesamte Gehaltssumme durch die Anzahl der Mitarbeiter teilst. Das Eingabeformat lautet: Unternehmensname, anschließend Sätze aus fünf Werten (Mitarbeiter-ID, Name, Abteilung, Gehalt, Berufserfahrung), die mit "employees_done" enden, gefolgt von der nachzuschlagenden Mitarbeiter-ID.
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Übe selbstständig: Online-Dart-Compiler