חיפוש ברשימה: indexOf
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 6 מתוך 65.
כשצריך למצוא היכן נמצא איבר מסוים ברשימה, Dart מספקת את המתודה indexOf(). המתודה מחפשת ברשימה ומחזירה את מיקום האינדקס של ההופעה הראשונה של האיבר שמחפשים.
המתודה indexOf() מקבלת את האיבר שברצונך למצוא כפרמטר ומחזירה מספר שלם. אם האיבר נמצא ברשימה, היא מחזירה את מיקום האינדקס (החל מ־0). אם האיבר לא נמצא, היא מחזירה -1.
List<String> fruits = ['apple', 'banana', 'orange', 'banana'];
int appleIndex = fruits.indexOf('apple'); // 0
int bananaIndex = fruits.indexOf('banana'); // 1 (ההופעה הראשונה)
int grapeIndex = fruits.indexOf('grape'); // -1 (לא נמצא)שיטה זו שימושית במיוחד כשצריך לדעת את המיקום של פריט לפני ביצוע פעולות כמו הוספה או הסרה במיקומים ספציפיים. זכור ש־indexOf() מוצאת רק את ההתאמה הראשונה, כך שאם רכיב מופיע כמה פעמים, תקבל את האינדקס של ההופעה הראשונה שלו.
אתגר
קלצרו תוכנית שמנהלת מערכת לחיפוש ספרים בספרייה באמצעות איתור מיקומם של ספרים מסוימים על המדפים. התוכנית שלכם צריכה:
- לקרוא קלט מסוג מחרוזת שמייצג את שם היחידה בספרייה
- לקרוא כמה קלטים מסוג מחרוזת שמייצגים את כותרות הספרים שעל המדף (הקלט יסתיים כשתתקבל מחרוזת ריקה)
- לקרוא קלט מסוג מחרוזת שמייצג את כותרת הספר שאותו מחפשים
- להשתמש בשיטה
indexOf()כדי למצוא את המיקום של הספר המבוקש - להדפיס את תוצאות החיפוש בדיוק בפורמט שמוצג למטה
לדוגמה, אם היחידה בספרייה היא "Science Fiction", הספרים הם "Dune", "Foundation", "Neuromancer", "Foundation", "Ender's Game", והספר שמחפשים הוא "Foundation", התוכנית שלכם צריכה להציג:
Library Section: Science Fiction
Books on shelf: [Dune, Foundation, Neuromancer, Foundation, Ender's Game]
Searching for: Foundation
Book found at position: 1
Status: Book located successfullyאם היחידה בספרייה היא "Mystery", הספרים הם "Sherlock Holmes", "Agatha Christie", "The Maltese Falcon", והספר שמחפשים הוא "Gone Girl", התוכנית שלכם צריכה להציג:
Library Section: Mystery
Books on shelf: [Sherlock Holmes, Agatha Christie, The Maltese Falcon]
Searching for: Gone Girl
Book found at position: -1
Status: Book not availableעל התוכנית שלכם להשתמש בשיטה indexOf() כדי לחפש את הספר. כשהספר נמצא (position >= 0), הציגו "Book located successfully". כשהספר לא נמצא (position = -1), הציגו "Book not available". זכרו ש-indexOf() מחזירה את המיקום של ההופעה הראשונה אם הספר מופיע כמה פעמים.
נסו בעצמכם
import 'dart:io';
void main() {
// קראו את שם המדור בספרייה
String? section = stdin.readLineSync();
// קראו שמות ספרים עד למחרוזת ריקה
List<String> books = [];
String? book;
while ((book = stdin.readLineSync()) != null && book!.isNotEmpty) {
books.add(book);
}
// קראו את שם הספר שיש לחפש
String? searchBook = stdin.readLineSync();
// TODO: כתבו את הקוד שלכם למטה
// השתמשו במתודה indexOf() כדי למצוא את מיקום הספר
// הדפיסו את התוצאות בפורמט הנדרש
print('Library Section: $section');
print('Books on shelf: $books');
print('Searching for: $searchBook');
// הדפיסו את המיקום והסטטוס בהתאם לתוצאות החיפוש
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
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 אונליין