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'ı yeniden List'e dönüştürür. Bu dönüşüm, iterable'daki 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

Kütüphane kitap öneri sistemini, kitapları tür tercihlerine göre filtreleyip sonuçları uygun bir liste biçimine dönüştürerek yöneten bir program oluştur. Programın şunları yapması gerekir:

  1. Kütüphane adını temsil eden bir dize girdisi oku
  2. Kitap adlarını temsil eden birden fazla dize girdisi oku (boş bir dize aldığında girdi sona erecek)
  3. Her kitap adına karşılık gelen kitap türlerini temsil eden birden fazla dize girdisi oku (boş bir dize aldığında girdi sona erecek)
  4. Filtreleme için tercih edilen türü temsil eden bir dize girdisi oku
  5. Tercih edilen türle eşleşen kitapları filtrelemek için where() metodunu kullan
  6. Filtrelenmiş iterable'ı uygun bir listeye dönüştürmek için toList() metodunu kullan
  7. Öneri sonuçlarını aşağıda gösterilen tam biçimde yazdır

Ö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 çıktısı şöyle olmalıdır:

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

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 çıktısı şöyle olmalıdır:

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

Kütüphane adı "Community Library", kitap "To Kill a Mockingbird", tür "Classic" ve tercih edilen tür "Classic" ise programın çıktısı şöyle olmalıdır:

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, kitapları türlerini tercih edilen türle eşleştirerek filtrelemek için where() metodunu, ardından elde edilen iterable'ı bir listeye dönüştürmek için toList() metodunu kullanması gerekir. Filtrelenmiş iterable parantez biçiminde, son liste ise köşeli parantez biçiminde gösterilmelidir.

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

Kendi başına pratik yap: Online Dart derleyicisi