'.toList()' verwenden
Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 12 von 65.
Wenn Sie Methoden wie map() und where() auf einer Liste verwenden, geben diese keine neue List zurück – sie geben ein Iterable zurück. Während ein Iterable die von Ihnen gewünschten transformierten oder gefilterten Daten enthält, müssen Sie es oft wieder in eine List umwandeln, um vertraute Listenmethoden und -eigenschaften zu verwenden.
Die Methode .toList() konvertiert ein Iterable zurück in eine List. Diese Konvertierung erstellt eine neue Liste, die alle Elemente des Iterables enthält, und gibt Ihnen Zugriff auf alle standardmäßigen Listenoperationen, die Sie gewohnt sind.
List<String> words = ['apple', 'banana', 'cherry', 'date'];
// where() gibt ein Iterable zurück, keine Liste
var longWordsIterable = words.where((word) => word.length > 5);
// Konvertiere das Iterable in eine Liste
List<String> longWordsList = longWordsIterable.toList();
print(longWordsList); // ['banana', 'cherry']Dieser Konvertierungsschritt ist essenziell, wenn Sie zusätzliche Listenoperationen auf Ihren gefilterten oder transformierten Daten durchführen müssen. Ohne .toList() würden Sie mit einem Iterable arbeiten, das einen eingeschränkteren Funktionsumfang als eine vollständige List hat.
Aufgabe
EinfachErstellen Sie ein Programm, das ein Empfehlungssystem für Bibliotheksbücher verwaltet, indem es Bücher basierend auf Genre-Präferenzen filtert und die Ergebnisse in ein korrektes Listenformat umwandelt. Ihr Programm sollte:
- Einen String einlesen, der den Namen der Bibliothek darstellt
- Mehrere Strings einlesen, die Buchtitel darstellen (die Eingabe endet, wenn Sie einen leeren String erhalten)
- Mehrere Strings einlesen, die die Buchgenres entsprechend jedem Titel darstellen (die Eingabe endet, wenn Sie einen leeren String erhalten)
- Einen String einlesen, der das bevorzugte Genre darstellt, nach dem gefiltert werden soll
- Die Methode
where()verwenden, um Bücher zu filtern, die dem bevorzugten Genre entsprechen - Die Methode
toList()verwenden, um das gefilterte Iterable in eine richtige Liste umzuwandeln - Die Empfehlungsergebnisse in dem unten gezeigten exakten Format ausgeben
Wenn zum Beispiel der Bibliotheksname "City Library" ist, die Bücher "The Great Gatsby", "Dune", "Pride and Prejudice", "1984" sind, die Genres "Fiction", "Science Fiction", "Romance", "Fiction" sind und das bevorzugte Genre "Fiction" ist, sollte Ihr Programm Folgendes ausgeben:
Library: City Library
All books: [The Great Gatsby, Dune, Pride and Prejudice, 1984]
All genres: [Fiction, Science Fiction, Romance, Fiction]
Filtering by genre: Fiction
Filtered books (iterable): (The Great Gatsby, 1984)
Recommended books (list): [The Great Gatsby, 1984]
Total recommendations: 2
Status: Recommendations readyWenn der Bibliotheksname "School Library" ist, die Bücher "Harry Potter", "Lord of the Rings" sind, die Genres "Fantasy", "Fantasy" sind und das bevorzugte Genre "Mystery" ist, sollte Ihr Programm Folgendes ausgeben:
Library: School Library
All books: [Harry Potter, Lord of the Rings]
All genres: [Fantasy, Fantasy]
Filtering by genre: Mystery
Filtered books (iterable): ()
Recommended books (list): []
Total recommendations: 0
Status: Recommendations readyWenn der Bibliotheksname "Community Library" ist, die Bücher "To Kill a Mockingbird" sind, die Genres "Classic" sind und das bevorzugte Genre "Classic" ist, sollte Ihr Programm Folgendes ausgeben:
Library: Community Library
All books: [To Kill a Mockingbird]
All genres: [Classic]
Filtering by genre: Classic
Filtered books (iterable): (To Kill a Mockingbird)
Recommended books (list): [To Kill a Mockingbird]
Total recommendations: 1
Status: Recommendations readyIhr Programm muss die Methode where() verwenden, um Bücher zu filtern, indem deren Genre mit dem bevorzugten Genre abgeglichen wird, und dann die Methode toList() verwenden, um das resultierende Iterable in eine Liste umzuwandeln. Das gefilterte Iterable sollte im Klammerformat angezeigt werden, während die endgültige Liste im Format mit eckigen Klammern angezeigt werden sollte.
Spickzettel
Methoden wie map() und where() geben ein Iterable zurück, keine List. Verwenden Sie .toList(), um ein Iterable wieder in eine List umzuwandeln:
List<String> words = ['apple', 'banana', 'cherry', 'date'];
// where() gibt ein Iterable zurück, keine List
var longWordsIterable = words.where((word) => word.length > 5);
// Das Iterable in eine List umwandeln
List<String> longWordsList = longWordsIterable.toList();
print(longWordsList); // ['banana', 'cherry']Diese Konvertierung ist essenziell, wenn Sie zusätzliche Listenoperationen auf gefilterten oder transformierten Daten durchführen müssen.
Probier es selbst
import 'dart:io';
void main() {
// Bibliotheksnamen lesen
String? libraryName = stdin.readLineSync();
// Buchtitel lesen, bis eine leere Zeichenfolge eingegeben wird
List<String> books = [];
while (true) {
String? book = stdin.readLineSync();
if (book == null || book.isEmpty) break;
books.add(book);
}
// Buchgenres lesen, bis eine leere Zeichenfolge eingegeben wird
List<String> genres = [];
while (true) {
String? genre = stdin.readLineSync();
if (genre == null || genre.isEmpty) break;
genres.add(genre);
}
// Bevorzugtes Genre lesen
String? preferredGenre = stdin.readLineSync();
// TODO: Schreiben Sie Ihren Code unten
// Verwenden Sie die Methode where(), um Bücher nach dem bevorzugten Genre zu filtern
// Verwenden Sie die Methode toList(), um das gefilterte Iterable in eine Liste umzuwandeln
// Ergebnisse im erforderlichen Format ausgeben
print('Library: $libraryName');
print('All books: $books');
print('All genres: $genres');
print('Filtering by genre: $preferredGenre');
// Gefilterte Bücher (Iterable) und empfohlene Bücher (Liste) ausgeben
// Gesamtzahl der Empfehlungen und Status ausgeben
}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