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 der Map enthält, während .values ein Iterable zurückgibt, das alle entsprechenden Werte enthält. Diese Eigenschaften sind besonders nützlich, wenn Sie Schlüssel und Werte unabhängig voneinander verarbeiten müssen.

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

Erstellen Sie ein Programm, das ein digitales Bibliothekssystem verwaltet, indem es Buchsammlungen analysiert und Informationen über Titel und deren Erscheinungsjahre extrahiert. Ihr Programm sollte:

  1. Einen String-Input einlesen, der den Bibliotheksnamen darstellt
  2. Mehrere Paare von Eingaben einlesen, die Buchtitel und deren Erscheinungsjahre darstellen (die Eingabe endet, wenn Sie "catalog_done" erhalten)
  3. Eine Map erstellen, um jeden Buchtitel als Schlüssel und sein Erscheinungsjahr als Wert zu speichern
  4. Die Eigenschaft .keys verwenden, um alle Buchtitel zu extrahieren und sie in eine List umzuwandeln
  5. Die Eigenschaft .values verwenden, um alle Erscheinungsjahre zu extrahieren und sie in eine List umzuwandeln
  6. Das älteste Buch finden, indem das minimale Jahr aus den Werten ermittelt wird
  7. Das neueste Buch finden, indem das maximale Jahr aus den Werten ermittelt wird
  8. Die Bibliotheksanalyse im unten gezeigten exakten Format ausgeben

Wenn zum Beispiel der Bibliotheksname "Central Library" ist und der Katalog "To Kill a Mockingbird" mit dem Jahr 1960, "1984" mit dem Jahr 1949, "The Great Gatsby" mit dem Jahr 1925, "Harry Potter" mit dem Jahr 1997 enthält, sollte Ihr 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" ist und der Katalog "Pride and Prejudice" mit dem Jahr 1813, "Moby Dick" mit dem Jahr 1851, "Brave New World" mit dem Jahr 1932 enthält, sollte Ihr 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" ist 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, "Klara and the Sun" mit dem Jahr 2021 enthält, sollte Ihr 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

Ihr Programm muss die Eigenschaft .keys verwenden, um alle Buchtitel zu extrahieren, und die Eigenschaft .values, um alle Erscheinungsjahre zu extrahieren. Konvertieren Sie beide Iterables mit .toList() in Listen. Berechnen Sie die Sammlungsspanne, indem Sie das älteste Jahr vom neuesten Jahr abziehen. Das Eingabeformat ist: Bibliotheksname, dann abwechselnd Buchtitel und Erscheinungsjahre (als Strings, die in Ganzzahlen umgewandelt werden müssen), endend mit "catalog_done".

Spickzettel

Verwenden Sie .keys, um alle Schlüssel aus einer Map zu extrahieren, und .values, um alle Werte zu extrahieren:

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)

Konvertieren Sie Iterables mit .toList() in Listen für listenspezifische Funktionalität:

List<String> namesList = inventory.keys.toList();
List<double> pricesList = inventory.values.toList();

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