Menu
Coddy logo textTech

הסרת פריטים מרשימה: removeWhere

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

לפעמים צריך להסיר כמה איברים מרשימה לפי תנאי מסוים. במקום להסיר איברים אחד-אחד, Dart מספקת את השיטה removeWhere(), שיכולה להסיר את כל האיברים שמתאימים לתנאי בדיקה בפעולה אחת.

המתודה removeWhere() מקבלת פונקציית בדיקה כפרמטר. הפונקציה מקבלת כל איבר ברשימה ומחזירה true אם יש להסיר את האיבר, או false אם עליו להישאר. לאחר מכן המתודה מסירה את כל האיברים שפונקציית הבדיקה מחזירה עבורם true.

List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8];

// הסר את כל המספרים הזוגיים
numbers.removeWhere((number) => number % 2 == 0);

print(numbers);  // [1, 3, 5, 7]

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

challenge icon

אתגר

קל

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

  1. לקרוא קלט מסוג מחרוזת שמייצג את שם הכיתה
  2. לקרוא כמה ערכי קלט שלמים שמייצגים את ציוני התלמידים (הקלט יסתיים כשתקבלו -1)
  3. להשתמש בשיטה removeWhere() כדי להסיר את כל הציונים שמתחת ל־60 (ציוני נכשל)
  4. להדפיס את תוצאות סינון הציונים בדיוק בפורמט שמוצג למטה

לדוגמה, אם שם הכיתה הוא "Mathematics 101" והציונים הם 85, 45, 92, 38, 76, 55, 88, התוכנית שלכם צריכה להציג:

Class: Mathematics 101
Original scores: [85, 45, 92, 38, 76, 55, 88]
Removed failing scores (below 60)
Passing scores: [85, 92, 76, 88]
Students passed: 4
Students failed: 3

אם שם הכיתה הוא "History 201" וכל הציונים עוברים: 75, 82, 91, התוכנית שלכם צריכה להציג:

Class: History 201
Original scores: [75, 82, 91]
Removed failing scores (below 60)
Passing scores: [75, 82, 91]
Students passed: 3
Students failed: 0

אם שם הכיתה הוא "Chemistry 301" וכל הציונים נכשלים: 45, 32, 58, התוכנית שלכם צריכה להציג:

Class: Chemistry 301
Original scores: [45, 32, 58]
Removed failing scores (below 60)
Passing scores: []
Students passed: 0
Students failed: 3

על התוכנית שלכם להשתמש בשיטה removeWhere() עם פונקציית בדיקה שמחזירה true עבור ציונים שמתחת ל־60. השיטה צריכה לשנות את הרשימה המקורית על ידי הסרת כל ציוני הנכשל, כך שיישארו בה רק ציוני המעבר.

נסו בעצמכם

import 'dart:io';

void main() {
  // קראו את שם הכיתה
  String? className = stdin.readLineSync();
  
  // קראו ציונים עד שמתקבל -1
  List<int> scores = [];
  while (true) {
    int score = int.parse(stdin.readLineSync()!);
    if (score == -1) {
      break;
    }
    scores.add(score);
  }
  
  // שמרו את הציונים המקוריים להצגה
  List<int> originalScores = List.from(scores);
  
  // TODO: כתבו את הקוד שלכם למטה
  // השתמשו במתודה removeWhere() כדי להסיר ציונים נמוכים מ-60
  
  // הדפיסו את התוצאות
  print('Class: $className');
  print('Original scores: $originalScores');
  print('Removed failing scores (below 60)');
  print('Passing scores: $scores');
  print('Students passed: ${scores.length}');
  print('Students failed: ${originalScores.length - scores.length}');
}
quiz iconבחנו את עצמכם

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

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

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