Menu
Coddy logo textTech

'.toList()' Kullanımı

Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası — ders 12 / 65.

Bir liste üzerinde map() ve where() gibi metotları kullandığınızda, bunlar yeni bir List döndürmezler; bir Iterable döndürürler. Bir Iterable istediğiniz dönüştürülmüş veya filtrelenmiş verileri içerse de, tanıdık liste metotlarını ve özelliklerini kullanmak için genellikle onu tekrar bir List yapısına dönüştürmeniz gerekir.

.toList() yöntemi, bir Iterable nesnesini tekrar bir List nesnesine dönüştürür. Bu dönüştürme, iterable içindeki tüm öğeleri içeren yeni bir liste oluşturur ve alışık olduğunuz tüm standart liste işlemlerine erişmenizi sağlar.

List<String> words = ['apple', 'banana', 'cherry', 'date'];

// where() bir Iterable döndürür, bir List değil
var longWordsIterable = words.where((word) => word.length > 5);

// Iterable'ı bir List'e dönüştürün
List<String> longWordsList = longWordsIterable.toList();
print(longWordsList);  // ['banana', 'cherry']

Bu dönüştürme adımı, filtrelenmiş veya dönüştürülmüş verileriniz üzerinde ek liste işlemleri gerçekleştirmeniz gerektiğinde gereklidir. .toList() olmadan, tam bir List'ten daha sınırlı işlevselliğe sahip olan bir Iterable ile çalışıyor olurdunuz.

challenge icon

Görev

Kolay

Kitapları tür tercihlerine göre filtreleyerek ve sonuçları uygun bir liste formatına dönüştürerek bir kütüphane kitap öneri sistemini yöneten bir program oluşturun. Programınız şunları yapmalıdır:

  1. Kütüphane adını temsil eden bir dize (string) girdisi okuyun
  2. Kitap başlıklarını temsil eden birden fazla dize girdisi okuyun (boş bir dize aldığınızda girdi sona erecektir)
  3. Her başlığa karşılık gelen kitap türlerini temsil eden birden fazla dize girdisi okuyun (boş bir dize aldığınızda girdi sona erecektir)
  4. Filtreleme yapılacak tercih edilen türü temsil eden bir dize girdisi okuyun
  5. Tercih edilen türle eşleşen kitapları filtrelemek için where() metodunu kullanın
  6. Filtrelenmiş yinelenebilir nesneyi (iterable) uygun bir listeye dönüştürmek için toList() metodunu kullanın
  7. Öneri sonuçlarını aşağıda gösterilen tam formatta yazdırın

Örneğin, kütüphane adı "City Library", kitaplar "The Great Gatsby", "Dune", "Pride and Prejudice", "1984", türler "Fiction", "Science Fiction", "Romance", "Fiction" ve tercih edilen tür "Fiction" ise programınız şu çıktıyı vermelidir:

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

Eğer kütüphane adı "School Library", kitaplar "Harry Potter", "Lord of the Rings", türler "Fantasy", "Fantasy" ve tercih edilen tür "Mystery" ise programınız şu çıktıyı vermelidir:

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

Eğer kütüphane adı "Community Library", kitaplar "To Kill a Mockingbird", türler "Classic" ve tercih edilen tür "Classic" ise programınız şu çıktıyı vermelidir:

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

Programınız, kitapları türlerini tercih edilen türle eşleştirerek filtrelemek için where() metodunu kullanmalı, ardından elde edilen yinelenebilir nesneyi bir listeye dönüştürmek için toList() metodunu kullanmalıdır. Filtrelenmiş yinelenebilir nesne parantez formatında, nihai liste ise köşeli parantez formatında görüntülenmelidir.

Kopya kağıdı

map() ve where() gibi metotlar bir List değil, bir Iterable döndürür. Bir Iterable'ı tekrar bir List'e dönüştürmek için .toList() kullanın:

List<String> words = ['apple', 'banana', 'cherry', 'date'];

// where() bir List değil, bir Iterable döndürür
var longWordsIterable = words.where((word) => word.length > 5);

// Iterable'ı bir List'e dönüştürün
List<String> longWordsList = longWordsIterable.toList();
print(longWordsList);  // ['banana', 'cherry']

Bu dönüştürme, filtrelenmiş veya dönüştürülmüş veriler üzerinde ek liste işlemleri gerçekleştirmeniz gerektiğinde gereklidir.

Kendin dene

import 'dart:io';

void main() {
  // Kütüphane adını oku
  String? libraryName = stdin.readLineSync();
  
  // Boş dize gelene kadar kitap başlıklarını oku
  List<String> books = [];
  while (true) {
    String? book = stdin.readLineSync();
    if (book == null || book.isEmpty) break;
    books.add(book);
  }
  
  // Boş dize gelene kadar kitap türlerini oku
  List<String> genres = [];
  while (true) {
    String? genre = stdin.readLineSync();
    if (genre == null || genre.isEmpty) break;
    genres.add(genre);
  }
  
  // Tercih edilen türü oku
  String? preferredGenre = stdin.readLineSync();
  
  // TODO: Kodunuzu aşağıya yazın
  // Kitapları tercih edilen türe göre filtrelemek için where() metodunu kullanın
  // Filtrelenmiş yinelenebilir nesneyi bir listeye dönüştürmek için toList() metodunu kullanın
  
  // Sonuçları istenen formatta yazdırın
  print('Library: $libraryName');
  print('All books: $books');
  print('All genres: $genres');
  print('Filtering by genre: $preferredGenre');
  // Filtrelenmiş kitapları (iterable) ve önerilen kitapları (list) yazdırın
  // Toplam önerileri ve durumu yazdırın
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler