Menu
Coddy logo textTech

Map-Eigenschaften: keys & values

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

Beim Arbeiten mit Map-Sammlungen müssen Sie manchmal alle Schlüssel oder alle Werte separat extrahieren. Dart bietet dafür zwei praktische Eigenschaften: .keys und .values.

Die Eigenschaft .keys gibt ein Iterable zurück, das alle Schlüssel aus der Map enthält, während .values ein Iterable zurückgibt, das alle entsprechenden Werte enthält. Diese Eigenschaften sind besonders nützlich, wenn du Schlüssel und Werte unabhängig voneinander verarbeiten musst.

Map<String, double> inventory = {
  'Laptop': 999.99,
  'Mouse': 25.50,
  'Keyboard': 75.00
};

Iterable<String> productNames = inventory.keys;
Iterable<double> prices = inventory.values;

print(productNames);  // (Laptop, Mouse, Keyboard)
print(prices);        // (999.99, 25.5, 75.0)

Da diese Eigenschaften Iterables anstelle von Listen zurückgeben, können Sie diese mit .toList() in Listen umwandeln, wenn Sie listenspezifische Funktionen benötigen. Diese Trennung von Schlüsseln und Werten ist besonders hilfreich, wenn Sie einen Aspekt Ihrer Daten unabhängig vom anderen analysieren oder bearbeiten müssen.

challenge icon

Aufgabe

Einfach

Erstelle ein Programm, das ein digitales Bibliothekssystem verwaltet, indem es Büchersammlungen analysiert und Informationen zu Titeln und ihren Veröffentlichungsjahren extrahiert. Dein Programm sollte:

  1. Eine String-Eingabe lesen, die den Namen der Bibliothek darstellt
  2. Mehrere Eingabepaare lesen, die Buchtitel und ihre Veröffentlichungsjahre darstellen (die Eingabe endet, sobald du "catalog_done" erhältst)
  3. Eine Map erstellen, in der jeder Buchtitel als Schlüssel und sein Veröffentlichungsjahr als Wert gespeichert wird
  4. Die Eigenschaft .keys verwenden, um alle Buchtitel zu extrahieren und sie in eine Liste umzuwandeln
  5. Die Eigenschaft .values verwenden, um alle Veröffentlichungsjahre zu extrahieren und sie in eine Liste umzuwandeln
  6. Das älteste Buch finden, indem das kleinste Jahr aus den Werten ermittelt wird
  7. Das neueste Buch finden, indem das größte Jahr aus den Werten ermittelt wird
  8. Die Bibliotheksanalyse exakt im unten gezeigten Format ausgeben

Wenn der Bibliotheksname beispielsweise "Central Library" lautet und der Katalog "To Kill a Mockingbird" mit dem Jahr 1960, "1984" mit dem Jahr 1949, "The Great Gatsby" mit dem Jahr 1925 und "Harry Potter" mit dem Jahr 1997 enthält, sollte dein Programm Folgendes ausgeben:

Library: Central Library
Book Collection Analysis:
All book titles: [To Kill a Mockingbird, 1984, The Great Gatsby, Harry Potter]
All publication years: [1960, 1949, 1925, 1997]
Total books in collection: 4
Oldest book year: 1925
Newest book year: 1997
Collection span: 72 years
Status: Library catalog analysis completed

Wenn der Bibliotheksname "University Library" lautet und der Katalog "Pride and Prejudice" mit dem Jahr 1813, "Moby Dick" mit dem Jahr 1851 und "Brave New World" mit dem Jahr 1932 enthält, sollte dein Programm Folgendes ausgeben:

Library: University Library
Book Collection Analysis:
All book titles: [Pride and Prejudice, Moby Dick, Brave New World]
All publication years: [1813, 1851, 1932]
Total books in collection: 3
Oldest book year: 1813
Newest book year: 1932
Collection span: 119 years
Status: Library catalog analysis completed

Wenn der Bibliotheksname "Community Library" lautet und der Katalog "The Hobbit" mit dem Jahr 1937, "Dune" mit dem Jahr 1965, "Neuromancer" mit dem Jahr 1984, "The Martian" mit dem Jahr 2011 und "Klara and the Sun" mit dem Jahr 2021 enthält, sollte dein Programm Folgendes ausgeben:

Library: Community Library
Book Collection Analysis:
All book titles: [The Hobbit, Dune, Neuromancer, The Martian, Klara and the Sun]
All publication years: [1937, 1965, 1984, 2011, 2021]
Total books in collection: 5
Oldest book year: 1937
Newest book year: 2021
Collection span: 84 years
Status: Library catalog analysis completed

Dein Programm muss die Eigenschaft .keys verwenden, um alle Buchtitel zu extrahieren, und die Eigenschaft .values, um alle Veröffentlichungsjahre zu extrahieren. Wandle beide Iterable mithilfe von .toList() in Listen um. Berechne die Zeitspanne der Sammlung, indem du das älteste Jahr vom neuesten Jahr subtrahierst. Das Eingabeformat lautet: Bibliotheksname, danach abwechselnd Buchtitel und Veröffentlichungsjahre (als Strings, die in Ganzzahlen umgewandelt werden müssen), mit "catalog_done" am Ende.

Probier es selbst

import 'dart:io';

void main() {
  // Bibliotheksnamen lesen
  String? libraryName = stdin.readLineSync();
  
  // Erstelle eine Map, um Buchtitel und Erscheinungsjahre zu speichern
  Map<String, int> bookCatalog = {};
  
  // Buchtitel und Jahre lesen, bis "catalog_done" eingegeben wird
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "catalog_done") {
      break;
    }
    String bookTitle = input!;
    String? yearInput = stdin.readLineSync();
    int publicationYear = int.parse(yearInput!);
    bookCatalog[bookTitle] = publicationYear;
  }
  
  // TODO: Schreibe deinen Code unten
  // Buchtitel mit der Eigenschaft .keys extrahieren und in eine Liste umwandeln
  // Erscheinungsjahre mit der Eigenschaft .values extrahieren und in eine Liste umwandeln
  // Ältestes und neuestes Jahr finden
  // Zeitraum der Sammlung berechnen
  // Bibliotheksanalyse im erforderlichen Format ausgeben
  
  print("Library: $libraryName");
  print("Book Collection Analysis:");
  // Füge hier deine Ausgabeanweisungen hinzu
}
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