'.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
EinfachErstelle ein Programm, das ein Empfehlungssystem für Bibliotheksbücher verwaltet, indem es Bücher anhand von Genrepräferenzen filtert und die Ergebnisse in ein geeignetes Listenformat umwandelt. Dein Programm sollte:
- Eine Zeichenketteneingabe lesen, die den Namen der Bibliothek darstellt
- Mehrere Zeichenketteneingaben lesen, die Buchtitel darstellen (die Eingabe endet, wenn du eine leere Zeichenkette erhältst)
- Mehrere Zeichenketteneingaben lesen, die den jeweiligen Titeln zugeordnete Buchgenres darstellen (die Eingabe endet, wenn du eine leere Zeichenkette erhältst)
- Eine Zeichenketteneingabe lesen, die 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 geeignete Liste umzuwandeln - Die Empfehlungsergebnisse exakt im unten gezeigten Format ausgeben
Wenn der Bibliotheksname beispielsweise "City Library" lautet, die Bücher "The Great Gatsby", "Dune", "Pride and Prejudice", "1984" sind, die Genres "Fiction", "Science Fiction", "Romance", "Fiction" lauten und das bevorzugte Genre "Fiction" ist, sollte dein 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" lautet, die Bücher "Harry Potter", "Lord of the Rings" sind, die Genres "Fantasy", "Fantasy" lauten und das bevorzugte Genre "Mystery" ist, sollte dein 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" lautet, das Buch "To Kill a Mockingbird" ist, das Genre "Classic" lautet und das bevorzugte Genre "Classic" ist, sollte dein 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 readyDein Programm muss die Methode where() verwenden, um Bücher zu filtern, deren Genre dem bevorzugten Genre entspricht, und anschließend die Methode toList() verwenden, um das resultierende Iterable in eine Liste umzuwandeln. Das gefilterte Iterable sollte im Klammerformat dargestellt werden, während die endgültige Liste im Format mit eckigen Klammern dargestellt werden sollte.
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Übe selbstständig: Online-Dart-Compiler