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.
Aufgabe
EinfachErstellen Sie ein Programm, das ein digitales Bibliothekssystem verwaltet, indem es Buchsammlungen analysiert und Informationen über Titel und deren Erscheinungsjahre extrahiert. Ihr Programm sollte:
- Einen String-Input einlesen, der den Bibliotheksnamen darstellt
- Mehrere Paare von Eingaben einlesen, die Buchtitel und deren Erscheinungsjahre darstellen (die Eingabe endet, wenn Sie
"catalog_done"erhalten) - Eine Map erstellen, um jeden Buchtitel als Schlüssel und sein Erscheinungsjahr als Wert zu speichern
- Die Eigenschaft
.keysverwenden, um alle Buchtitel zu extrahieren und sie in eine List umzuwandeln - Die Eigenschaft
.valuesverwenden, um alle Erscheinungsjahre zu extrahieren und sie in eine List umzuwandeln - Das älteste Buch finden, indem das minimale Jahr aus den Werten ermittelt wird
- Das neueste Buch finden, indem das maximale Jahr aus den Werten ermittelt wird
- 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 completedWenn 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 completedWenn 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 completedIhr 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
}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