Menu
CoddyTech

Verschachtelte Maps

Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy. Lektion 31 von 65.

Manchmal musst du Daten in einer komplexeren, hierarchischen Struktur organisieren als in einem einfachen Schlüssel-Wert-Paar. Verschachtelte Maps ermöglichen es dir, Maps als Werte in anderen Maps zu speichern und so mehrere Ebenen der Datenorganisation zu schaffen.

Eine verschachtelte Map ist einfach eine Map, bei der die Werte selbst Map-Objekte sind. Diese Struktur eignet sich perfekt, um Daten mit Kategorien und Unterkategorien darzustellen, etwa 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']);      // 32

Um auf Daten in einer verschachtelten Map zuzugreifen, verwendest du mehrere eckige Klammern. Mit der ersten Klammer greifst du auf den Schlüssel der äußeren Map zu und mit der zweiten auf den Schlüssel der inneren Map. Eine Map-Abfrage gibt null zurück, wenn der Schlüssel fehlt. Daher benötigt Dart nach dem ersten Zugriff ein !, wenn du weißt, dass der Schlüssel vorhanden ist: userProfiles['alice']!['email']. Mit dieser zweistufigen Struktur lassen sich zusammengehörige Informationen einfach gruppieren und zugleich übersichtlich und zugänglich halten.

challenge icon

Aufgabe

Einfach

Erstelle ein Programm, das das Mitarbeiterverzeichnis eines Unternehmens mithilfe verschachtelter Maps verwaltet, um detaillierte Mitarbeiterinformationen zu speichern. Dein Programm soll:

  1. Mehrere Eingabesätze mit Mitarbeiterdaten einlesen (die Eingabe endet, wenn du "employees_done" erhältst). Jeder Mitarbeiter hat:
    • Mitarbeiter-ID (Zeichenfolge)
    • Name (Zeichenfolge)
    • Abteilung (Zeichenfolge)
    • Gehalt (Zeichenfolge, die in eine Ganzzahl umgewandelt werden muss)
    • Berufserfahrung in Jahren (Zeichenfolge, die in eine Ganzzahl umgewandelt werden muss)
  2. Eine Zeichenfolgeneingabe einlesen, die eine nachzuschlagende Mitarbeiter-ID darstellt
  3. Eine verschachtelte Map erstellen, in der jede Mitarbeiter-ID ein Schlüssel ist und der Wert eine weitere Map mit den Details des Mitarbeiters enthält
  4. Mithilfe des Zugriffs auf verschachtelte Maps bestimmte Mitarbeiterinformationen abrufen und ausgeben
  5. Statistiken zu den Abteilungen berechnen und den Bericht des Mitarbeiterverzeichnisses genau im unten gezeigten Format ausgeben

Wenn der Unternehmensname beispielsweise "TechCorp Solutions" lautet, die Mitarbeiterdaten "EMP001" mit dem Namen "Alice Johnson", der Abteilung "Engineering", dem Gehalt 75000 und der Berufserfahrung 5, "EMP002" mit dem Namen "Bob Smith", der Abteilung "Marketing", dem Gehalt 60000 und der Berufserfahrung 3, "EMP003" mit dem Namen "Carol Davis", der Abteilung "Engineering", dem Gehalt 80000 und der Berufserfahrung 7 umfassen 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 successfully

Wenn der Unternehmensname "Global Industries" lautet, die Mitarbeiterdaten "E100" mit dem Namen "David Wilson", der Abteilung "Sales", dem Gehalt 55000 und der Berufserfahrung 4, "E101" mit dem Namen "Emma Brown", der Abteilung "HR", dem Gehalt 65000 und der Berufserfahrung 6 umfassen 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 successfully

Wenn der Unternehmensname "StartupHub" lautet, die Mitarbeiterdaten "S001" mit dem Namen "Frank Miller", der Abteilung "Development", dem Gehalt 70000 und der Berufserfahrung 2, "S002" mit dem Namen "Grace Lee", der Abteilung "Design", dem Gehalt 58000 und der Berufserfahrung 3, "S003" mit dem Namen "Henry Chen", der Abteilung "Development", dem Gehalt 72000 und der Berufserfahrung 4, "S004" mit dem Namen "Ivy Taylor", der Abteilung "Marketing", dem Gehalt 62000 und der Berufserfahrung 5 umfassen 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 successfully

Dein 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 mit "name", "department", "salary" und "experience" als Schlüsseln enthält. Verwende den Zugriff auf verschachtelte Maps mit doppelten eckigen Klammern, um bestimmte Mitarbeiterinformationen abzurufen. Zähle die Mitarbeiter pro Abteilung und berechne das Durchschnittsgehalt, indem du die Gesamtgehaltssumme durch die Anzahl der Mitarbeiter teilst. Das Eingabeformat lautet: Unternehmensname, anschließend Sätze aus jeweils 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 einlesen
  String? companyName = stdin.readLineSync();
  
  // Verschachtelte Map für das Mitarbeiterverzeichnis initialisieren
  Map<String, Map<String, dynamic>> employeeDirectory = {};
  
  // Mitarbeiterdaten bis "employees_done" einlesen
  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 Berufserfahrung in Ganzzahlen umwandeln
    int salary = int.parse(salaryStr!);
    int experience = int.parse(experienceStr!);
    
    // TODO: Für jeden Mitarbeiter eine verschachtelte Map-Struktur erstellen und zum Verzeichnis hinzufügen
    
  }
  
  // Mitarbeiter-ID für die Suche einlesen
  String? lookupId = stdin.readLineSync();
  
  // TODO: Schreibe unten deinen Code, um:
  // 1. Firmennamen und Mitarbeiterverzeichnis anzuzeigen
  // 2. Informationen zu einem bestimmten Mitarbeiter zu suchen und anzuzeigen
  // 3. Abteilungsstatistiken zu berechnen
  // 4. Das Durchschnittsgehalt zu berechnen
  // 5. Den vollständigen Bericht im geforderten Format auszugeben
  
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-Dart-Compiler