Menu
Coddy logo textTech

חיתוך קבוצות

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Dart של Coddy. שיעור 23 מתוך 65.

כשצריך למצוא איברים שקיימים בשתי אוספי Set, המתודה intersection() מספקת את הפתרון המושלם. הפעולה הזאת מזהה את האיברים המשותפים בין שתי קבוצות, ויוצרת קבוצה חדשה שמכילה רק את הפריטים שמופיעים בשני האוספים המקוריים.

השיטה intersection() פועלת על ידי השוואת האיברים של שתי קבוצות והחזרת קבוצה חדשה המכילה רק את הערכים המשותפים. כמו פעולות אחרות על קבוצות, היא מטפלת באופן אוטומטי בייחודיות, כך שכל איבר משותף מופיע פעם אחת בלבד בתוצאה.

Set<String> aliceFriends = {'Bob', 'Charlie', 'Diana', 'Eve'};
Set<String> bobFriends = {'Alice', 'Charlie', 'Frank', 'Diana'};

Set<String> mutualFriends = aliceFriends.intersection(bobFriends);
print(mutualFriends);  // {Charlie, Diana}

פעולה זו שימושית במיוחד למציאת חפיפות בנתונים, כגון תחומי עניין משותפים בין משתמשים, מיומנויות משותפות בצוותים או קריטריונים תואמים בפעולות סינון. החיתוך עוזר לזהות מה משותף לשתי אוספים, ולכן הוא שימושי למשימות השוואה וניתוח.

challenge icon

אתגר

קל

צרו תוכנית שמנהלת פלטפורמת מדיה חברתית באמצעות מציאת קשרים משותפים בין שני משתמשים. התוכנית שלכם צריכה:

  1. לקרוא קלט של מחרוזת שמייצג את שם המשתמש הראשון
  2. לקרוא כמה קלטים של מחרוזות שמייצגים את הקשרים של המשתמש הראשון (הקלט יסתיים כשתקבלו "user1_done")
  3. לקרוא קלט של מחרוזת שמייצג את שם המשתמש השני
  4. לקרוא כמה קלטים של מחרוזות שמייצגים את הקשרים של המשתמש השני (הקלט יסתיים כשתקבלו "user2_done")
  5. ליצור שתי קבוצות נפרדות לאחסון הקשרים של כל משתמש
  6. להשתמש במתודה intersection() כדי למצוא קשרים משותפים בין שני המשתמשים
  7. להדפיס את תוצאות ניתוח הקשרים בדיוק בפורמט שמוצג בהמשך

לדוגמה, אם המשתמשת הראשונה היא "Alice" והקשרים שלה הם "Bob", "Charlie", "Diana", "Eve", והמשתמש השני הוא "Bob" והקשרים שלו הם "Alice", "Charlie", "Frank", "Diana", התוכנית שלכם צריכה להפיק את הפלט הבא:

User Analysis: Finding mutual connections
Alice's connections: {Bob, Charlie, Diana, Eve}
Bob's connections: {Alice, Charlie, Frank, Diana}
Mutual connections: {Charlie, Diana}
Total mutual connections: 2
Connection strength: Strong (2+ mutual connections)
Status: Users have mutual connections

אם המשתמשת הראשונה היא "Sarah" והקשרים שלה הם "John", "Mike", "Lisa", והמשתמש השני הוא "Tom" והקשרים שלו הם "Emma", "David", "Kate", התוכנית שלכם צריכה להפיק את הפלט הבא:

User Analysis: Finding mutual connections
Sarah's connections: {John, Mike, Lisa}
Tom's connections: {Emma, David, Kate}
Mutual connections: {}
Total mutual connections: 0
Connection strength: None (no mutual connections)
Status: Users have no mutual connections

אם המשתמשת הראשונה היא "Emma" והקשרים שלה הם "Alex", "Jordan", "Taylor", "Morgan", והמשתמש השני הוא "Jordan" והקשרים שלו הם "Emma", "Taylor", "Casey", התוכנית שלכם צריכה להפיק את הפלט הבא:

User Analysis: Finding mutual connections
Emma's connections: {Alex, Jordan, Taylor, Morgan}
Jordan's connections: {Emma, Taylor, Casey}
Mutual connections: {Taylor}
Total mutual connections: 1
Connection strength: Weak (1 mutual connection)
Status: Users have mutual connections

התוכנית שלכם חייבת להשתמש במתודה intersection() כדי למצוא קשרים משותפים בין הקבוצות של שני המשתמשים. קבעו את חוזק הקשר לפי מספר הקשרים המשותפים: "None" עבור 0 קשרים משותפים, "Weak" עבור קשר משותף אחד בדיוק, ו-"Strong" עבור 2 קשרים משותפים או יותר. אם יש קשרים משותפים, הציגו את "Users have mutual connections" כסטטוס; אחרת, הציגו את "Users have no mutual connections".

נסו בעצמכם

import 'dart:io';

void main() {
  // קראו את שם המשתמש הראשון
  String? user1Name = stdin.readLineSync();
  
  // קראו את פרטי המשתמש הראשון 's connections עד "user1_done"
  Set<String> user1Connections = <String>{};
  String? connection;
  while ((connection = stdin.readLineSync()) != "user1_done") {
    if (connection != null) {
      user1Connections.add(connection);
    }
  }
  
  // קראו את שם המשתמש השני
  String? user2Name = stdin.readLineSync();
  
  // קראו את פרטי המשתמש השני 's connections עד "user2_done"
  Set<String> user2Connections = <String>{};
  while ((connection = stdin.readLineSync()) != "user2_done") {
    if (connection != null) {
      user2Connections.add(connection);
    }
  }
  
  // TODO: כתבו את הקוד שלכם למטה
  // מצאו קשרים משותפים באמצעות המתודה intersection()
  // קבעו את חוזק הקשר לפי מספר הקשרים המשותפים
  // צרו את פורמט הפלט הנדרש
  
  // הדפיסו את תוצאות הניתוח
  print("User Analysis: Finding mutual connections");
  // הוסיפו כאן את פקודות הפלט שלכם
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר Dart אונליין