Menu
Coddy logo textTech

'.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.

challenge icon

Aufgabe

Einfach

Erstellen 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:

  1. Einen String einlesen, der den Namen der Bibliothek darstellt
  2. Mehrere Strings einlesen, die Buchtitel darstellen (die Eingabe endet, wenn Sie einen leeren String erhalten)
  3. Mehrere Strings einlesen, die die Buchgenres entsprechend jedem Titel darstellen (die Eingabe endet, wenn Sie einen leeren String erhalten)
  4. Einen String einlesen, der das bevorzugte Genre darstellt, nach dem gefiltert werden soll
  5. Die Methode where() verwenden, um Bücher zu filtern, die dem bevorzugten Genre entsprechen
  6. Die Methode toList() verwenden, um das gefilterte Iterable in eine richtige Liste umzuwandeln
  7. 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 ready

Wenn 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 ready

Wenn 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 ready

Ihr 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
}
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