Usare '.toList()'
Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 12 di 65.
Quando usi metodi come map() e where() su una lista, non restituiscono una nuova List: restituiscono un Iterable. Anche se un Iterable contiene i dati trasformati o filtrati che vuoi, spesso devi convertirlo di nuovo in una List per usare i metodi e le proprietà familiari delle liste.
Il metodo .toList() converte un Iterable di nuovo in una List. Questa conversione crea una nuova lista contenente tutti gli elementi dell'iterabile, dandoti accesso a tutte le operazioni standard sulle liste a cui sei abituato.
List<String> words = ['apple', 'banana', 'cherry', 'date'];
// where() restituisce un Iterable, non una List
var longWordsIterable = words.where((word) => word.length > 5);
// Converti l'Iterable in una List
List<String> longWordsList = longWordsIterable.toList();
print(longWordsList); // ['banana', 'cherry']Questo passaggio di conversione è essenziale quando devi eseguire ulteriori operazioni sulle liste dei dati filtrati o trasformati. Senza .toList(), lavoreresti con un Iterable, che ha funzionalità più limitate rispetto a una List completa.
Sfida
FacileCrea un programma che gestisca un sistema di consigli di libri per una biblioteca, filtrando i libri in base alle preferenze di genere e convertendo i risultati nel formato di una lista appropriata. Il tuo programma deve:
- Leggere una stringa in input che rappresenta il nome della biblioteca
- Leggere più stringhe in input che rappresentano i titoli dei libri (l’input terminerà quando riceverai una stringa vuota)
- Leggere più stringhe in input che rappresentano i generi dei libri corrispondenti a ciascun titolo (l’input terminerà quando riceverai una stringa vuota)
- Leggere una stringa in input che rappresenta il genere preferito da usare come filtro
- Usare il metodo
where()per filtrare i libri che corrispondono al genere preferito - Usare il metodo
toList()per convertire l’iterabile filtrato in una lista appropriata - Stampare i risultati dei consigli nel formato esatto mostrato di seguito
Ad esempio, se il nome della biblioteca è "City Library", i libri sono "The Great Gatsby", "Dune", "Pride and Prejudice", "1984", i generi sono "Fiction", "Science Fiction", "Romance", "Fiction" e il genere preferito è "Fiction", il tuo programma dovrebbe produrre:
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 readySe il nome della biblioteca è "School Library", i libri sono "Harry Potter", "Lord of the Rings", i generi sono "Fantasy", "Fantasy" e il genere preferito è "Mystery", il tuo programma dovrebbe produrre:
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 readySe il nome della biblioteca è "Community Library", il libro è "To Kill a Mockingbird", il genere è "Classic" e il genere preferito è "Classic", il tuo programma dovrebbe produrre:
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 readyIl tuo programma deve usare il metodo where() per filtrare i libri confrontando il loro genere con quello preferito, quindi usare il metodo toList() per convertire l’iterabile risultante in una lista. L’iterabile filtrato dovrebbe essere visualizzato tra parentesi tonde, mentre la lista finale dovrebbe essere visualizzata tra parentesi quadre.
Provalo tu
import 'dart:io';
void main() {
// Leggi il nome della biblioteca
String? libraryName = stdin.readLineSync();
// Leggi i titoli dei libri fino a una stringa vuota
List<String> books = [];
while (true) {
String? book = stdin.readLineSync();
if (book == null || book.isEmpty) break;
books.add(book);
}
// Leggi i generi dei libri fino a una stringa vuota
List<String> genres = [];
while (true) {
String? genre = stdin.readLineSync();
if (genre == null || genre.isEmpty) break;
genres.add(genre);
}
// Leggi il genere preferito
String? preferredGenre = stdin.readLineSync();
// TODO: Scrivi il tuo codice qui sotto
// Usa il metodo where() per filtrare i libri in base al genere preferito
// Usa il metodo toList() per convertire l'iterabile filtrato in una lista
// Stampa i risultati nel formato richiesto
print('Library: $libraryName');
print('All books: $books');
print('All genres: $genres');
print('Filtering by genre: $preferredGenre');
// Stampa i libri filtrati (iterabile) e i libri consigliati (lista)
// Stampa il numero totale di consigli e lo stato
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Manipolazione avanzata delle liste
Proprietà delle liste: primo e ultimoStato della lista: isEmpty e isNotEmpInvertire una listaAggiungere a una lista: insertRimozione dalla lista: removeWhereRicerca in una lista: indexOfOrdinare una listaMescolare una listaRiepilogo - Organizzatore di liste4Manipolazione avanzata delle mappe
Iterare su una mappaVerificare chiavi e valoriProprietà delle mappe: chiavi e valoriAggiunta condizionale: putIfAbsentRimuovere elementi da una mappaMappe annidateRiepilogo - Aggiornamento dell'inventario2Operazioni funzionali sulle liste
Trasformare con 'map'Filtrare con 'where'Usare '.toList()'Verificare condizioni con 'any'Condizioni con 'every'Trovare con 'firstWhere'Riepilogo - Filtraggio dei dati3Insiemi
Che cos'è un insieme?Creare un insiemeAggiungere e rimuovere elementi dagli insiemiVerificare la presenza di elementi in un insiemeConvertire una lista in un insiemeUnione di insiemiIntersezione di insiemiDifferenza tra insiemiRiepilogo - Lista degli ospiti uniciEsercitati da solo: Compilatore Dart online