הסרת רשומות מ־Map
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 30 מתוך 65.
בעת ניהול נתונים ב־Map, לעיתים קרובות תצטרך להסיר רשומות שכבר אין בהן צורך. המתודה remove() מספקת דרך פשוטה למחוק זוג מפתח-ערך ממפה באמצעות המפתח שלו.
המתודה remove() מקבלת פרמטר יחיד: המפתח של הרשומה שברצונך למחוק. כשקוראים לה, היא מסירה מהמפה גם את המפתח וגם את הערך המשויך אליו. אם המפתח לא קיים במפה, המתודה פשוט לא עושה דבר, מבלי לגרום לשגיאה.
Map<String, double> inventory = {
'Laptop': 999.99,
'Mouse': 25.50,
'Keyboard': 75.00
};
// הסר את העכבר מהמלאי
inventory.remove('Mouse');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}
// ניסיון להסיר פריט שאינו קיים לא עושה דבר
inventory.remove('Tablet');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}השיטה הזאת חיונית לשמירה על מפות נקיות ועדכניות באפליקציות שלך. בין אם אתה מנהל מלאי, נתוני משתמשים או אוסף אחר שבו צריך להסיר פריטים, remove() מספקת דרך בטוחה ויעילה למחיקת רשומות לפי המפתח שלהן.
אתגר
קלצרו תוכנית שמנהלת שירות הזרמת מוזיקה דיגיטלי באמצעות מעקב אחר ספריות שירים והסרת שירים שאינם זמינים עוד עקב בעיות רישוי. התוכנית שלכם צריכה:
- לקרוא קלט מסוג מחרוזת שמייצג את שם שירות הזרמת המוזיקה
- לקרוא כמה זוגות של קלטים שמייצגים כותרות שירים ומספרי ההזרמות שלהם (הקלט יסתיים כשתקבלו
"library_done") - לקרוא כמה קלטים מסוג מחרוזת שמייצגים שירים שיש להסיר עקב בעיות רישוי (הקלט יסתיים כשתקבלו
"removal_done") - ליצור Map לאחסון כותרות השירים כמפתחות ומספרי ההזרמות שלהם כערכים
- להשתמש בשיטה
remove()כדי להסיר מהספרייה כל שיר שצוין - לחשב את הנתונים הסטטיסטיים של הספרייה ולהדפיס את דוח ההסרה בדיוק בפורמט שמוצג למטה
לדוגמה, אם שם השירות הוא "MusicStream Pro", הספרייה כוללת את "Bohemian Rhapsody" עם 2500000 הזרמות, את "Imagine" עם 1800000 הזרמות, את "Hotel California" עם 2200000 הזרמות, את "Stairway to Heaven" עם 1900000 הזרמות, והשירים להסרה הם "Imagine", "Yesterday", "Hotel California", התוכנית שלכם צריכה להפיק:
Service: MusicStream Pro
Original Library: {Bohemian Rhapsody: 2500000, Imagine: 1800000, Hotel California: 2200000, Stairway to Heaven: 1900000}
Removal Process:
Removing 'Imagine': Song removed (had 1800000 streams)
Removing 'Yesterday': Song not found in library
Removing 'Hotel California': Song removed (had 2200000 streams)
Updated Library: {Bohemian Rhapsody: 2500000, Stairway to Heaven: 1900000}
Library Statistics:
Songs before removal: 4
Songs after removal: 2
Songs successfully removed: 2
Songs not found: 1
Total streams lost: 4000000
Remaining total streams: 4400000
Status: Library update completedאם שם השירות הוא "SoundWave", הספרייה כוללת את "Shape of You" עם 3200000 הזרמות, את "Blinding Lights" עם 2800000 הזרמות, את "Someone Like You" עם 2100000 הזרמות, והשירים להסרה הם "Blinding Lights", "Perfect", התוכנית שלכם צריכה להפיק:
Service: SoundWave
Original Library: {Shape of You: 3200000, Blinding Lights: 2800000, Someone Like You: 2100000}
Removal Process:
Removing 'Blinding Lights': Song removed (had 2800000 streams)
Removing 'Perfect': Song not found in library
Updated Library: {Shape of You: 3200000, Someone Like You: 2100000}
Library Statistics:
Songs before removal: 3
Songs after removal: 2
Songs successfully removed: 1
Songs not found: 1
Total streams lost: 2800000
Remaining total streams: 5300000
Status: Library update completedאם שם השירות הוא "AudioHub", הספרייה כוללת את "Bad Guy" עם 1500000 הזרמות, את "Watermelon Sugar" עם 1700000 הזרמות, את "Levitating" עם 1400000 הזרמות, את "Good 4 U" עם 1600000 הזרמות, והשירים להסרה הם "Bad Guy", "Levitating", "Good 4 U", "Drivers License", התוכנית שלכם צריכה להפיק:
Service: AudioHub
Original Library: {Bad Guy: 1500000, Watermelon Sugar: 1700000, Levitating: 1400000, Good 4 U: 1600000}
Removal Process:
Removing 'Bad Guy': Song removed (had 1500000 streams)
Removing 'Levitating': Song removed (had 1400000 streams)
Removing 'Good 4 U': Song removed (had 1600000 streams)
Removing 'Drivers License': Song not found in library
Updated Library: {Watermelon Sugar: 1700000}
Library Statistics:
Songs before removal: 4
Songs after removal: 1
Songs successfully removed: 3
Songs not found: 1
Total streams lost: 4500000
Remaining total streams: 1700000
Status: Library update completedהתוכנית שלכם חייבת להשתמש בשיטה remove() כדי למחוק שירים מה-Map. עקבו אחר השירים שהוסרו בהצלחה ואחר אלה שלא נמצאו. חשבו את סך ההזרמות שאבדו באמצעות חיבור מספרי ההזרמות של השירים שהוסרו בהצלחה. פורמט הקלט יהיה: שם השירות, ולאחר מכן כותרות שירים ומספרי הזרמות לסירוגין (כמחרוזות שיש להמיר למספרים שלמים), עד "library_done", ולאחר מכן כותרות השירים להסרה עד "removal_done".
נסו בעצמכם
import 'dart:io';
void main() {
// קראו את שם השירות
String? serviceName = stdin.readLineSync();
// צרו Map לאחסון שמות השירים ומספרי ההשמעות שלהם
Map<String, int> songLibrary = {};
// קראו את נתוני ספריית השירים
while (true) {
String? input = stdin.readLineSync();
if (input == "library_done") break;
String songTitle = input!;
String? streamCountStr = stdin.readLineSync();
int streamCount = int.parse(streamCountStr!);
songLibrary[songTitle] = streamCount;
}
// קראו את השירים שיש להסיר
List<String> songsToRemove = [];
while (true) {
String? input = stdin.readLineSync();
if (input == "removal_done") break;
songsToRemove.add(input!);
}
// TODO: כתבו את הקוד שלכם למטה
// בצעו את הסרת השירים באמצעות המתודה remove()
// עקבו אחר נתונים סטטיסטיים והפיקו את פורמט הפלט הנדרש
// הדפיסו את התוצאות בפורמט הנדרש
// זכרו לכלול: שם השירות, הספרייה המקורית, תהליך ההסרה,
// הספרייה המעודכנת ונתונים סטטיסטיים של הספרייה
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
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 אונליין