Używanie '.toList()'
Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 12 z 65.
Gdy używasz metod takich jak map() i where() na liście, nie zwracają one nowej List — zwracają Iterable. Chociaż Iterable zawiera przekształcone lub przefiltrowane dane, których potrzebujesz, często trzeba przekonwertować je z powrotem na List, aby korzystać ze znanych metod i właściwości list.
Metoda .toList() przekształca obiekt Iterable z powrotem w List. To przekształcenie tworzy nową listę zawierającą wszystkie elementy z obiektu iterowalnego, dając Ci dostęp do wszystkich standardowych operacji na listach, do których jesteś przyzwyczajony.
List<String> words = ['apple', 'banana', 'cherry', 'date'];
// where() zwraca Iterable, a nie List
var longWordsIterable = words.where((word) => word.length > 5);
// Przekształć Iterable w List
List<String> longWordsList = longWordsIterable.toList();
print(longWordsList); // ['banana', 'cherry']Ten etap konwersji jest niezbędny, gdy chcesz wykonać dodatkowe operacje na liście przefiltrowanych lub przekształconych danych. Bez .toList() pracowałbyś z obiektem Iterable, który ma bardziej ograniczoną funkcjonalność niż pełna List.
Wyzwanie
ŁatwyUtwórz program zarządzający systemem rekomendacji książek w bibliotece, który filtruje książki na podstawie preferencji gatunkowych i konwertuje wyniki na odpowiedni format listy. Twój program powinien:
- Odczytać ciąg znaków reprezentujący nazwę biblioteki
- Odczytać wiele ciągów znaków reprezentujących tytuły książek (wprowadzanie zakończy się po otrzymaniu pustego ciągu znaków)
- Odczytać wiele ciągów znaków reprezentujących gatunki książek odpowiadające poszczególnym tytułom (wprowadzanie zakończy się po otrzymaniu pustego ciągu znaków)
- Odczytać ciąg znaków reprezentujący preferowany gatunek, według którego należy filtrować
- Użyć metody
where(), aby przefiltrować książki pasujące do preferowanego gatunku - Użyć metody
toList(), aby przekonwertować przefiltrowany obiekt iterowalny na odpowiednią listę - Wyświetlić wyniki rekomendacji w dokładnie takim formacie, jak pokazano poniżej
Na przykład, jeśli nazwa biblioteki to "City Library", książki to "The Great Gatsby", "Dune", "Pride and Prejudice", "1984", gatunki to "Fiction", "Science Fiction", "Romance", "Fiction", a preferowany gatunek to "Fiction", program powinien wyświetlić:
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 readyJeśli nazwa biblioteki to "School Library", książki to "Harry Potter", "Lord of the Rings", gatunki to "Fantasy", "Fantasy", a preferowany gatunek to "Mystery", program powinien wyświetlić:
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 readyJeśli nazwa biblioteki to "Community Library", książka to "To Kill a Mockingbird", gatunek to "Classic", a preferowany gatunek to "Classic", program powinien wyświetlić:
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 readyTwój program musi używać metody where(), aby filtrować książki przez dopasowanie ich gatunku do preferowanego gatunku, a następnie użyć metody toList(), aby przekonwertować wynikowy obiekt iterowalny na listę. Przefiltrowany obiekt iterowalny powinien być wyświetlony w nawiasach okrągłych, a końcowa lista — w nawiasach kwadratowych.
Spróbuj swoich sił
import 'dart:io';
void main() {
// Wczytaj nazwę biblioteki
String? libraryName = stdin.readLineSync();
// Wczytuj tytuły książek aż do napotkania pustego ciągu znaków
List<String> books = [];
while (true) {
String? book = stdin.readLineSync();
if (book == null || book.isEmpty) break;
books.add(book);
}
// Wczytuj gatunki książek aż do napotkania pustego ciągu znaków
List<String> genres = [];
while (true) {
String? genre = stdin.readLineSync();
if (genre == null || genre.isEmpty) break;
genres.add(genre);
}
// Wczytaj preferowany gatunek
String? preferredGenre = stdin.readLineSync();
// TODO: Napisz swój kod poniżej
// Użyj metody where(), aby filtrować książki według preferowanego gatunku
// Użyj metody toList(), aby przekształcić przefiltrowany obiekt iterowalny w listę
// Wyświetl wyniki w wymaganym formacie
print('Library: $libraryName');
print('All books: $books');
print('All genres: $genres');
print('Filtering by genre: $preferredGenre');
// Wyświetl przefiltrowane książki (obiekt iterowalny) i polecane książki (lista)
// Wyświetl łączną liczbę rekomendacji i status
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Zaawansowana manipulacja listami
Właściwości listy: first i lastStan listy: isEmpty i isNotEmpOdwracanie listyDodawanie do listy: insertUsuwanie z listy: removeWhereWyszukiwanie na liście: indexOfSortowanie listyMieszanie elementów listyPodsumowanie – Organizator listy4Zaawansowane operacje na mapach
Iterowanie po mapieSprawdzanie kluczy i wartościWłaściwości mapy: klucze i wartościDodawanie warunkowe: putIfAbsentUsuwanie wpisów z mapyZagnieżdżone mapyPodsumowanie – aktualizacja stanu magazynowego2Operacje funkcyjne na listach
Przekształcanie za pomocą 'map'Filtrowanie za pomocą 'where'Używanie '.toList()'Sprawdzanie warunków za pomocą 'any'Warunki z użyciem 'every'Wyszukiwanie za pomocą 'firstWhere'Podsumowanie — filtrowanie danych5Projekt: Kalkulator koszyka zakupowego
Konfiguracja projektuDodawanie produktów do koszyka3Zbiory
Czym jest zbiór?Tworzenie zbioruDodawanie i usuwanie elementów ze zbiorówSprawdzanie, czy element znajduje się w zbiorzeKonwersja listy na zbiórSuma zbiorówCzęść wspólna zbiorówRóżnica zbiorówPodsumowanie — unikalna lista gościPoćwicz samodzielnie: Kompilator Dart online