הוספה והסרה מקבוצות
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 19 מתוך 65.
לאחר שיש לך Set, לעיתים קרובות תצטרך לשנות את התוכן שלו על ידי הוספת איברים חדשים או הסרת איברים קיימים. המתודות add() ו־remove() מספקות דרכים פשוטות לניהול האיברים בקבוצה שלך.
השיטה add() מנסה להוסיף איבר חדש לקבוצה. עם זאת, מכיוון שקבוצות מאחסנות רק ערכים ייחודיים, אם תנסה להוסיף איבר שכבר קיים, השיטה פשוט לא תעשה דבר - לא תתרחש שגיאה, והקבוצה תישאר ללא שינוי.
Set<String> usernames = {'alice', 'bob', 'charlie'};
usernames.add('diana'); // מוסיף את 'diana' בהצלחה
usernames.add('alice'); // לא עושה דבר - 'alice' כבר קיים
print(usernames); // {alice, bob, charlie, diana}המתודה remove() פועלת על ידי קבלת הערך שברצונך למחוק והסרתו מהקבוצה. אם הרכיב לא קיים בקבוצה, המתודה פשוט לא עושה דבר, ולכן בטוח להשתמש בה בלי לבדוק קודם.
usernames.remove('bob'); // מסיר את 'bob'
usernames.remove('unknown'); // לא עושה דבר - האיבר לא נמצא
print(usernames); // {alice, charlie, diana}אתגר
קלצרו תוכנית שמנהלת מערכת לשיתוף פעולה בצוות, באמצעות הוספת חברי צוות חדשים והסרת חברים לא פעילים מצוות הפרויקט. התוכנית שלכם צריכה:
- לקרוא קלט מסוג מחרוזת שמייצג את שם הפרויקט
- לקרוא מספר קלטים מסוג מחרוזת שמייצגים את חברי הצוות הראשוניים (הקלט יסתיים כשתקבלו
"initial_done") - לקרוא מספר קלטים מסוג מחרוזת שמייצגים חברים חדשים להוספה (הקלט יסתיים כשתקבלו
"add_done") - לקרוא מספר קלטים מסוג מחרוזת שמייצגים חברים להסרה (הקלט יסתיים כשתקבלו
"remove_done") - ליצור Set עם חברי הצוות הראשוניים
- להשתמש בשיטה
add()כדי להוסיף כל חבר חדש לצוות - להשתמש בשיטה
remove()כדי להסיר מהצוות כל חבר שצוין - להדפיס את תוצאות ניהול הצוות בדיוק בפורמט שמוצג להלן
לדוגמה, אם שם הפרויקט הוא "Mobile App Development", החברים הראשוניים הם "Alice", "Bob", "Charlie", החברים החדשים להוספה הם "Diana", "Alice", "Eve", והחברים להסרה הם "Bob", "Frank", התוכנית שלכם צריכה להציג:
Project: Mobile App Development
Initial team: {Alice, Bob, Charlie}
Adding new members: [Diana, Alice, Eve]
After adding members: {Alice, Bob, Charlie, Diana, Eve}
Removing members: [Bob, Frank]
Final team: {Alice, Charlie, Diana, Eve}
Team size: 4
Status: Team updated successfullyאם שם הפרויקט הוא "Website Redesign", החברים הראשוניים הם "John", "Sarah", החברים החדשים להוספה הם "Mike", "John", והחברים להסרה הם "Sarah", "Unknown", התוכנית שלכם צריכה להציג:
Project: Website Redesign
Initial team: {John, Sarah}
Adding new members: [Mike, John]
After adding members: {John, Sarah, Mike}
Removing members: [Sarah, Unknown]
Final team: {John, Mike}
Team size: 2
Status: Team updated successfullyאם שם הפרויקט הוא "Data Analysis", החברים הראשוניים הם "Emma", החברים החדשים להוספה הם "Tom", "Lisa", והחברים להסרה הם "Emma", התוכנית שלכם צריכה להציג:
Project: Data Analysis
Initial team: {Emma}
Adding new members: [Tom, Lisa]
After adding members: {Emma, Tom, Lisa}
Removing members: [Emma]
Final team: {Tom, Lisa}
Team size: 2
Status: Team updated successfullyהתוכנית שלכם חייבת להדגים שהשיטה add() אינה עושה דבר כשמנסים להוסיף חבר שכבר קיים, ושהשיטה remove() אינה עושה דבר כשמנסים להסיר חבר שאינו קיים. שמרו את רשימות הקלט כדי להציג אילו פעולות נוסו, ואז הציגו את תוכן ה־Set לאחר כל פעולה כדי להדגים את הייחודיות של Sets.
נסו בעצמכם
import 'dart:io';
void main() {
// קראו את שם הפרויקט
String? projectName = stdin.readLineSync();
// קראו את חברי הצוות הראשוניים
List<String> initialMembers = [];
String? member;
while ((member = stdin.readLineSync()) != "initial_done") {
initialMembers.add(member!);
}
// קראו את החברים החדשים שיש להוסיף
List<String> membersToAdd = [];
while ((member = stdin.readLineSync()) != "add_done") {
membersToAdd.add(member!);
}
// קראו את החברים שיש להסיר
List<String> membersToRemove = [];
while ((member = stdin.readLineSync()) != "remove_done") {
membersToRemove.add(member!);
}
// TODO: כתבו את הקוד שלכם למטה
// צרו Set עם חברי הצוות הראשוניים
// הוסיפו חברים חדשים באמצעות המתודה add()
// הסירו חברים באמצעות המתודה remove()
// הדפיסו את התוצאות בפורמט הנדרש
print("Project: $projectName");
// הוסיפו כאן את פקודות ההדפסה הנותרות
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
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 אונליין