ערבוב רשימה
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 8 מתוך 65.
כשצריך לסדר את הפריטים ברשימה בסדר אקראי, Dart מספקת את המתודה shuffle(). המתודה הזאת מסדרת מחדש את כל הפריטים ברשימה באופן אקראי, ויוצרת סדר בלתי צפוי שמתאים למשחקים, לסימולציות או לכל מצב שבו צריך סידור אקראי.
השיטה shuffle() משנה ישירות את הרשימה המקורית, ומחליפה את המיקומים של כל האיברים באופן אקראי. בכל פעם שתקרא ל-shuffle(), תקבל סידור שונה של אותם איברים.
List<String> cards = ['Ace', 'King', 'Queen', 'Jack'];
print('Original: $cards'); // [Ace, King, Queen, Jack]
cards.shuffle();
print('Shuffled: $cards'); // [Queen, Ace, Jack, King] (סדר אקראי)השיטה הזו שימושית במיוחד ליצירת משחקי קלפים, לערבוב שאלות בחידונים או לכל יישום שבו רוצים להציג פריטים בסדר בלתי צפוי. מכיוון ש־shuffle() פועלת במקום, אין צורך ליצור רשימה חדשה - הרשימה הקיימת מסודרת מחדש באופן אקראי עבורך.
אתגר
קלצרו תוכנית שמנהלת טבלת משחקים של טורניר באמצעות ערבוב הקבוצות ליצירת משחקים אקראיים. התוכנית שלכם צריכה:
- לקרוא קלט מסוג מחרוזת שמייצג את שם הטורניר (הערך הזה נקרא אך לא מודפס)
- לקרוא כמה קלטים מסוג מחרוזת שמייצגים את שמות הקבוצות (הקלט מסתיים כשמתקבלת מחרוזת ריקה)
- לערבב את הקבוצות בסדר אקראי
- להדפיס את שם כל קבוצה בשורה נפרדת
לדוגמה, אם שם הטורניר הוא "Local Cup" ושמות הקבוצות הם "Wolves", "Hawks", התוכנית שלכם צריכה להציג את שמות הקבוצות בסדר מעורבב (אקראי), שם אחד בכל שורה:
Hawks
Wolvesאו:
Wolves
Hawksמכיוון ש-shuffle() מסדרת את הקבוצות בסדר אקראי, כל סדר של הקבוצות הוא תקין.
נסו בעצמכם
import 'dart:io';
void main() {
// קרא את שם הטורניר
String? tournamentName = stdin.readLineSync();
// קרא את שמות הקבוצות עד למחרוזת ריקה
List<String> teams = [];
String? teamName;
while ((teamName = stdin.readLineSync()) != null && teamName!.isNotEmpty) {
teams.add(teamName);
}
// TODO: ערבב את רשימת teams כדי ליצור משחקים אקראיים
// הדפס כל קבוצה בשורה נפרדת
for (String team in teams) {
print(team);
}
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
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 אונליין