איחוד קבוצות
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 22 מתוך 65.
כשיש לך שתי קבוצות Set נפרדות, אפשר לאחד אותן לקבוצה אחת שמכילה את כל האיברים הייחודיים של שתיהן באמצעות המתודה union(). הפעולה הזאת יוצרת קבוצה חדשה שכוללת כל איבר שמופיע באחת משתי הקבוצות המקוריות.
השיטה union() מטפלת בכפילויות באופן אוטומטי. אם אותו איבר קיים בשתי הקבוצות, הוא יופיע פעם אחת בלבד בקבוצת האיחוד שתתקבל, וכך נשמרת התכונה הבסיסית שלפיה קבוצות מכילות ערכים ייחודיים בלבד.
Set<String> frontendSkills = {'HTML', 'CSS', 'JavaScript'};
Set<String> backendSkills = {'JavaScript', 'Python', 'SQL'};
Set<String> allSkills = frontendSkills.union(backendSkills);
print(allSkills); // {HTML, CSS, JavaScript, Python, SQL}שימו לב איך 'JavaScript' מופיע בשתי הקבוצות המקוריות, אבל רק פעם אחת בתוצאת האיחוד. כך union() מתאימה במיוחד לשילוב אוספים קשורים תוך הבטחה שאין כפילויות, למשל מיזוג מערכי מיומנויות, שילוב הרשאות משתמשים או איחוד נתונים ממקורות מרובים.
כדי למצוא איברים שמופיעים בשתי הקבוצות, השתמשו בשיטה intersection(). היא מחזירה קבוצה חדשה שמכילה רק את האיברים המשותפים:
Set<String> sharedSkills = frontendSkills.intersection(backendSkills);
print(sharedSkills); // {JavaScript}ברגע שיש לך קבוצת איברים חופפים, אפשר להמיר אותה למחרוזת קריאה באמצעות המתודה join(). הדבר פועל באותו אופן כמו עם List. היא מחברת את כל האיברים למחרוזת אחת עם מפריד שתספק:
Set<String> overlap = frontendSkills.intersection(backendSkills);
String result = overlap.isEmpty ? 'None' : overlap.join(', ');
print(result); // JavaScriptביחד, union(), intersection() ו-join() מספקות לך כלים רבי עוצמה להשוואה ולהצגה של נתוני קבוצות, למשל, לשילוב מערכי הכישורים של צוותים ולזיהוי הכישורים שכבר משותפים להם.
אתגר
קלצרו תוכנית שמנהלת מערכת ליצירת קשרים מקצועיים באמצעות שילוב קבוצות מיומנויות של חברי צוות שונים, כדי ליצור פרופיל מקיף של מיומנויות לפרויקט. התוכנית שלכם צריכה:
- לקרוא קלט מסוג מחרוזת שמייצג את שם הפרויקט
- לקרוא כמה קלטים מסוג מחרוזת שמייצגים את המיומנויות של חבר הצוות הראשון (הקלט יסתיים כשתקבלו
"member1_done") - לקרוא כמה קלטים מסוג מחרוזת שמייצגים את המיומנויות של חבר הצוות השני (הקלט יסתיים כשתקבלו
"member2_done") - ליצור שתי קבוצות נפרדות לאחסון המיומנויות של כל אחד מחברי הצוות
- להשתמש בשיטה
union()כדי לשלב את שתי קבוצות המיומנויות לפרופיל מקיף של מיומנויות לפרויקט - להדפיס את תוצאות שילוב המיומנויות בדיוק בפורמט שמוצג למטה
לדוגמה, אם שם הפרויקט הוא "Web Development Project", המיומנויות של החבר הראשון הן "HTML", "CSS", "JavaScript", "React", והמיומנויות של החבר השני הן "JavaScript", "Node.js", "MongoDB", "React", התוכנית שלכם צריכה להציג:
Project: Web Development Project
Team Member 1 skills: {HTML, CSS, JavaScript, React}
Team Member 2 skills: {JavaScript, Node.js, MongoDB, React}
Combined project skills: {HTML, CSS, JavaScript, React, Node.js, MongoDB}
Total unique skills available: 6
Overlapping skills: JavaScript, React
Status: Project skill profile created successfullyאם שם הפרויקט הוא "Mobile App Development", המיומנויות של החבר הראשון הן "Dart", "Flutter", "Firebase", והמיומנויות של החבר השני הן "Swift", "iOS", "Xcode", התוכנית שלכם צריכה להציג:
Project: Mobile App Development
Team Member 1 skills: {Dart, Flutter, Firebase}
Team Member 2 skills: {Swift, iOS, Xcode}
Combined project skills: {Dart, Flutter, Firebase, Swift, iOS, Xcode}
Total unique skills available: 6
Overlapping skills: None
Status: Project skill profile created successfullyאם שם הפרויקט הוא "Data Science Project", המיומנויות של החבר הראשון הן "Python", "Pandas", "NumPy", "SQL", והמיומנויות של החבר השני הן "Python", "SQL", "Tableau", "Statistics", התוכנית שלכם צריכה להציג:
Project: Data Science Project
Team Member 1 skills: {Python, Pandas, NumPy, SQL}
Team Member 2 skills: {Python, SQL, Tableau, Statistics}
Combined project skills: {Python, Pandas, NumPy, SQL, Tableau, Statistics}
Total unique skills available: 6
Overlapping skills: Python, SQL
Status: Project skill profile created successfullyעל התוכנית שלכם להשתמש בשיטה union() כדי לשלב את שתי קבוצות המיומנויות ולהדגים כיצד היא מטפלת בכפילויות באופן אוטומטי. הציגו תחילה את קבוצות המיומנויות הנפרדות, ולאחר מכן את התוצאה המשולבת. זהו מיומנויות חופפות באמצעות מציאת מיומנויות שמופיעות בשתי הקבוצות המקוריות. אם אין מיומנויות חופפות, הציגו "None" בשורת המיומנויות החופפות.
נסו בעצמכם
import 'dart:io';
void main() {
// קרא את שם הפרויקט
String? projectName = stdin.readLineSync();
// קרא את המיומנויות של חבר הצוות הראשון
Set<String> member1Skills = <String>{};
String? skill;
while ((skill = stdin.readLineSync()) != "member1_done") {
if (skill != null) {
member1Skills.add(skill);
}
}
// קרא את המיומנויות של חבר הצוות השני
Set<String> member2Skills = <String>{};
while ((skill = stdin.readLineSync()) != "member2_done") {
if (skill != null) {
member2Skills.add(skill);
}
}
// TODO: כתוב את הקוד שלך למטה
// השתמש במתודה union() כדי לאחד את שתי קבוצות המיומנויות
// מצא מיומנויות משותפות לשתי הקבוצות
// חשב את המספר הכולל של המיומנויות הייחודיות
// הצג את התוצאות בפורמט הנדרש
print("Project: $projectName");
print("Team Member 1 skills: $member1Skills");
print("Team Member 2 skills: $member2Skills");
// הדפס את המיומנויות המאוחדות, המספר הכולל, המיומנויות המשותפות והסטטוס
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
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 אונליין