Menu
Coddy logo textTech

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']);      // 32

Um 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.

challenge icon

Aufgabe

Einfach

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

  1. Eine String-Eingabe lesen, die den Unternehmensnamen darstellt
  2. 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)
  3. Eine String-Eingabe lesen, die eine nachzuschlagende Mitarbeiter-ID darstellt
  4. 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
  5. Bestimmte Mitarbeiterinformationen mithilfe des Zugriffs auf verschachtelte Maps abrufen und anzeigen
  6. 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 successfully

Wenn 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 successfully

Wenn 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 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 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.

REQUIRED OUTPUT FORMAT: [Your translated content here]

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
  
}
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