איתור באמצעות 'firstWhere'
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 15 מתוך 65.
כשצריך למצוא ברשימה איבר מסוים שעומד בקריטריונים מסוימים, המתודה firstWhere() מספקת פתרון יעיל. בניגוד למתודות סינון שמחזירות את כל האיברים התואמים, firstWhere() מפסיקה לחפש ברגע שהיא מוצאת את האיבר הראשון שעומד בתנאי שלך.
המתודה firstWhere() מקבלת פונקציית בדיקה שמחזירה true או false עבור כל איבר. היא בודקת את האיברים בזה אחר זה עד שהיא מוצאת את הראשון שעובר את הבדיקה, ואז מחזירה מיד את אותו איבר.
List<int> numbers = [1, 3, 8, 15, 22, 7];
// מצא את המספר הזוגי הראשון
int firstEven = numbers.firstWhere((number) => number % 2 == 0);
print(firstEven); // 8במצבים שבהם אף איבר לא תואם לתנאי שלך, firstWhere() מספק פרמטר אופציונלי בשם orElse. הפרמטר הזה מקבל פונקציה שמחזירה ערך ברירת מחדל כשלא נמצאת התאמה, וכך מונעת מהתוכנית שלך לקרוס עם שגיאה.
אתגר
קלצרו תוכנית שמנהלת מערכת שירות לקוחות באמצעות איתור תלונת הלקוח הראשונה הדורשת טיפול מיידי. התוכנית שלכם צריכה:
- לקרוא קלט מסוג מחרוזת שמייצג את שם המחלקה
- לקרוא כמה קלטים של מספרים שלמים שמייצגים את רמות העדיפות של התלונות (הקלט יסתיים כשתקבלו
-1) - לקרוא קלט של מספר שלם שמייצג את סף העדיפות הדחופה
- להשתמש בשיטה
firstWhere()כדי למצוא את התלונה הראשונה שרמת העדיפות שלה גדולה מסף העדיפות הדחופה או שווה לו - להדפיס את תוצאות שירות הלקוחות בדיוק בפורמט שמוצג למטה
לדוגמה, אם שם המחלקה הוא "Technical Support", רמות העדיפות הן 3, 7, 2, 9, 4, וסף העדיפות הדחופה הוא 8, התוכנית שלכם צריכה להפיק את הפלט הבא:
Department: Technical Support
All complaints: [3, 7, 2, 9, 4]
Urgent threshold: 8
Searching for first complaint >= 8
First urgent complaint: 9
Status: Urgent complaint found - immediate action requiredאם שם המחלקה הוא "Billing Department", רמות העדיפות הן 4, 6, 3, 5, וסף העדיפות הדחופה הוא 7, התוכנית שלכם צריכה להפיק את הפלט הבא:
Department: Billing Department
All complaints: [4, 6, 3, 5]
Urgent threshold: 7
Searching for first complaint >= 7
First urgent complaint: Not found
Status: No urgent complaints - continue normal processingאם שם המחלקה הוא "Sales Support", רמות העדיפות הן 10, 2, 8, וסף העדיפות הדחופה הוא 9, התוכנית שלכם צריכה להפיק את הפלט הבא:
Department: Sales Support
All complaints: [10, 2, 8]
Urgent threshold: 9
Searching for first complaint >= 9
First urgent complaint: 10
Status: Urgent complaint found - immediate action requiredהתוכנית שלכם חייבת להשתמש בשיטה firstWhere() כדי למצוא את עדיפות התלונה הראשונה שגדולה מסף העדיפות הדחופה או שווה לו. אם לא נמצאה תלונה דחופה, הציגו "Not found" עבור התלונה הדחופה הראשונה והציגו "No urgent complaints - continue normal processing" בתור הסטטוס. אם נמצאה תלונה דחופה, הציגו את רמת העדיפות והציגו "Urgent complaint found - immediate action required" בתור הסטטוס.
נסו בעצמכם
import 'dart:io';
void main() {
// קראו את שם המחלקה
String? department = stdin.readLineSync();
// קראו את רמות העדיפות של התלונות עד -1
List<int> complaints = [];
while (true) {
int priority = int.parse(stdin.readLineSync()!);
if (priority == -1) break;
complaints.add(priority);
}
// קראו את סף הדחיפות
int urgentThreshold = int.parse(stdin.readLineSync()!);
// TODO: כתבו את הקוד שלכם למטה
// השתמשו במתודה firstWhere() כדי למצוא את התלונה הראשונה עם רמת עדיפות >= urgentThreshold
// הציגו את התוצאות
print('Department: $department');
print('All complaints: $complaints');
print('Urgent threshold: $urgentThreshold');
print('Searching for first complaint >= $urgentThreshold');
// הדפיסו את תוצאת התלונה הדחופה הראשונה
// הדפיסו הודעת מצב
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1מניפולציות מתקדמות ברשימות
מאפייני רשימה: ראשון ואחרוןמצב הרשימה: isEmpty ו-isNotEmpהיפוך רשימההוספה לרשימה: insertהסרת פריטים מרשימה: removeWhereחיפוש ברשימה: indexOfמיון רשימהערבוב רשימהסיכום – מארגן רשימות4מניפולציה מתקדמת של Map
מעבר על Mapבדיקה אם מפתחות וערכים קיימיםמאפייני Map: מפתחות וערכיםהוספה מותנית: putIfAbsentהסרת רשומות מ־MapMaps מקונניםסיכום – עדכון מלאי2פעולות פונקציונליות על רשימות
טרנספורמציה באמצעות 'map'סינון באמצעות 'where'שימוש ב-'.toList()'בדיקת תנאים באמצעות 'any'תנאים באמצעות 'every'איתור באמצעות 'firstWhere'סיכום – סינון נתונים5פרויקט: חישוב עגלת קניות
הגדרת הפרויקטהוספת פריטים לעגלה3קבוצות
מהי קבוצה?יצירת קבוצההוספה והסרה מקבוצותבדיקת נוכחות של איברים בקבוצההמרת רשימה לקבוצהאיחוד קבוצותחיתוך קבוצותהפרש קבוצותסיכום – רשימת אורחים ייחודית6טיפול בסיסי בשגיאות
מהן חריגות?בלוק ה-try-catchתפיסת חריגות באמצעות onבלוק ה-finallyהשלכת חריגהסיכום – חלוקה בטוחה9טיפוסי מנייה (Enums)
מה הם Enums?הגדרת Enum פשוטשימוש ב-Enums במשתניםEnums במשפטי 'switch'סיכום – רמזורתרגלו בעצמכם: קומפיילר Dart אונליין