'.toList()' 사용하기
Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 12번째.
리스트에서 map() 및 where()와 같은 메서드를 사용할 때, 이들은 새로운 List를 반환하지 않고 Iterable을 반환합니다. Iterable에는 원하는 변환되거나 필터링된 데이터가 포함되어 있지만, 익숙한 리스트 메서드와 속성을 사용하기 위해 이를 다시 List로 변환해야 하는 경우가 많습니다.
.toList() 메서드는 Iterable을 다시 List로 변환합니다. 이 변환은 이터러블(iterable)의 모든 요소를 포함하는 새로운 리스트를 생성하여, 익숙한 모든 표준 리스트 연산에 접근할 수 있게 해줍니다.
List<String> words = ['apple', 'banana', 'cherry', 'date'];
// where()는 List가 아닌 Iterable을 반환합니다
var longWordsIterable = words.where((word) => word.length > 5);
// Iterable을 List로 변환합니다
List<String> longWordsList = longWordsIterable.toList();
print(longWordsList); // ['banana', 'cherry']이 변환 단계는 필터링되거나 변형된 데이터에 대해 추가적인 리스트 연산을 수행해야 할 때 필수적입니다. .toList()가 없으면 Iterable을 사용하게 되는데, 이는 전체 List보다 기능이 더 제한적입니다.
챌린지
쉬움장르 선호도에 따라 도서를 필터링하고 그 결과를 적절한 리스트 형식으로 변환하여 도서관 도서 추천 시스템을 관리하는 프로그램을 작성하세요. 프로그램의 요구 사항은 다음과 같습니다:
- 도서관 이름을 나타내는 문자열 입력을 읽습니다.
- 도서 제목을 나타내는 여러 문자열 입력을 읽습니다 (빈 문자열이 입력될 때까지 읽습니다).
- 각 제목에 해당하는 도서 장르를 나타내는 여러 문자열 입력을 읽습니다 (빈 문자열이 입력될 때까지 읽습니다).
- 필터링할 선호 장르를 나타내는 문자열 입력을 읽습니다.
where()메서드를 사용하여 선호 장르와 일치하는 도서를 필터링합니다.toList()메서드를 사용하여 필터링된 iterable을 적절한 리스트로 변환합니다.- 추천 결과를 아래에 표시된 정확한 형식으로 출력합니다.
예를 들어, 도서관 이름이 "City Library"이고, 도서가 "The Great Gatsby", "Dune", "Pride and Prejudice", "1984"이며, 장르가 "Fiction", "Science Fiction", "Romance", "Fiction"이고, 선호 장르가 "Fiction"인 경우, 프로그램은 다음과 같이 출력해야 합니다:
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도서관 이름이 "School Library"이고, 도서가 "Harry Potter", "Lord of the Rings"이며, 장르가 "Fantasy", "Fantasy"이고, 선호 장르가 "Mystery"인 경우, 프로그램은 다음과 같이 출력해야 합니다:
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도서관 이름이 "Community Library"이고, 도서가 "To Kill a Mockingbird"이며, 장르가 "Classic"이고, 선호 장르가 "Classic"인 경우, 프로그램은 다음과 같이 출력해야 합니다:
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프로그램은 반드시 where() 메서드를 사용하여 도서의 장르와 선호 장르를 비교하여 필터링해야 하며, 그 다음 toList() 메서드를 사용하여 결과 iterable을 리스트로 변환해야 합니다. 필터링된 iterable은 괄호 형식으로 표시되어야 하며, 최종 리스트는 대괄호 형식으로 표시되어야 합니다.
치트 시트
map() 및 where()와 같은 메서드는 List가 아닌 Iterable을 반환합니다. Iterable을 다시 List로 변환하려면 .toList()를 사용하세요:
List<String> words = ['apple', 'banana', 'cherry', 'date'];
// where()는 List가 아닌 Iterable을 반환합니다
var longWordsIterable = words.where((word) => word.length > 5);
// Iterable을 List로 변환합니다
List<String> longWordsList = longWordsIterable.toList();
print(longWordsList); // ['banana', 'cherry']이러한 변환은 필터링되거나 변형된 데이터에 대해 추가적인 리스트 작업을 수행해야 할 때 필수적입니다.
직접 해보기
import 'dart:io';
void main() {
// 도서관 이름 읽기
String? libraryName = stdin.readLineSync();
// 빈 문자열이 나올 때까지 도서 제목 읽기
List<String> books = [];
while (true) {
String? book = stdin.readLineSync();
if (book == null || book.isEmpty) break;
books.add(book);
}
// 빈 문자열이 나올 때까지 도서 장르 읽기
List<String> genres = [];
while (true) {
String? genre = stdin.readLineSync();
if (genre == null || genre.isEmpty) break;
genres.add(genre);
}
// 선호하는 장르 읽기
String? preferredGenre = stdin.readLineSync();
// TODO: 아래에 코드를 작성하세요
// where() 메서드를 사용하여 선호하는 장르로 도서를 필터링하세요
// toList() 메서드를 사용하여 필터링된 iterable을 리스트로 변환하세요
// 필요한 형식으로 결과 출력
print('Library: $libraryName');
print('All books: $books');
print('All genres: $genres');
print('Filtering by genre: $preferredGenre');
// 필터링된 도서(iterable) 및 추천 도서(list) 출력
// 총 추천 수 및 상태 출력
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
1고급 리스트 조작
리스트 속성: first 및 last리스트 상태: isEmpty 및 isNotEmpty리스트 뒤집기리스트에 추가: insert리스트 요소 제거: removeWhere리스트에서 찾기: indexOf리스트 정렬리스트 섞기요약 - 리스트 정리 도구2함수형 리스트 연산
'map'으로 변환하기'where'로 필터링하기'.toList()' 사용하기'any'로 조건 확인하기'every'로 조건 확인하기'firstWhere'로 찾기요약 - 데이터 필터링