Menu
Coddy logo textTech

שימוש ב-'.toList()'

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 12 מתוך 65.

כשמשתמשים בשיטות כמו map() ו־where() על רשימה, הן לא מחזירות List חדש — הן מחזירות Iterable. אף ש־Iterable מכיל את הנתונים שעברו טרנספורמציה או סינון, לעיתים קרובות צריך להמיר אותו בחזרה ל־List כדי להשתמש בשיטות ובמאפיינים המוכרים של רשימה.

השיטה .toList() ממירה Iterable בחזרה ל־List. ההמרה הזו יוצרת רשימה חדשה שמכילה את כל האיברים מהאיטרטור, וכך מאפשרת לך להשתמש בכל פעולות הרשימה הסטנדרטיות שהתרגלת אליהן.

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

// where() מחזירה Iterable, ולא List
var longWordsIterable = words.where((word) => word.length > 5);

// המר את ה-Iterable ל-List
List<String> longWordsList = longWordsIterable.toList();
print(longWordsList);  // ['banana', 'cherry']

שלב ההמרה הזה חיוני כשצריך לבצע פעולות נוספות על רשימה של נתונים שסוננו או עברו שינוי. בלי .toList(), תעבדו עם Iterable, שהפונקציונליות שלו מוגבלת יותר מזו של List מלאה.

challenge icon

אתגר

קל

צרו תוכנית שמנהלת מערכת להמלצה על ספרים בספרייה באמצעות סינון ספרים לפי העדפות ז'אנר והמרת התוצאות לפורמט של רשימה תקינה. התוכנית שלכם צריכה:

  1. לקרוא קלט מסוג מחרוזת שמייצג את שם הספרייה
  2. לקרוא כמה קלטים מסוג מחרוזת שמייצגים את שמות הספרים (הקלט יסתיים כשתתקבל מחרוזת ריקה)
  3. לקרוא כמה קלטים מסוג מחרוזת שמייצגים את הז'אנרים של הספרים, בהתאמה לכל כותר (הקלט יסתיים כשתתקבל מחרוזת ריקה)
  4. לקרוא קלט מסוג מחרוזת שמייצג את הז'אנר המועדף לסינון
  5. להשתמש בשיטה where() כדי לסנן ספרים שתואמים לז'אנר המועדף
  6. להשתמש בשיטה toList() כדי להמיר את האיטרטור המסונן לרשימה תקינה
  7. להדפיס את תוצאות ההמלצות בפורמט המדויק שמוצג למטה

לדוגמה, אם שם הספרייה הוא "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() כדי להמיר את האיטרטור שנוצר לרשימה. יש להציג את האיטרטור המסונן בתוך סוגריים עגולים, ואילו את הרשימה הסופית יש להציג בתוך סוגריים מרובעים.

נסו בעצמכם

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() כדי להמיר את האוסף הניתן לאיטרציה שסונן לרשימה
  
  // הדפיסו את התוצאות בפורמט הנדרש
  print('Library: $libraryName');
  print('All books: $books');
  print('All genres: $genres');
  print('Filtering by genre: $preferredGenre');
  // הדפיסו את הספרים שסוננו (אוסף הניתן לאיטרציה) ואת הספרים המומלצים (רשימה)
  // הדפיסו את מספר ההמלצות הכולל ואת הסטטוס
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר Dart אונליין