Menu
Coddy logo textTech

המרת רשימה לקבוצה

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

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

כדי להמיר List ל־Set, פשוט מעבירים את הרשימה לבנאי Set.from(). כך יוצרים קבוצה חדשה שמכילה את כל האיברים הייחודיים מהרשימה המקורית.

List<int> numbersWithDuplicates = [1, 2, 2, 3, 3, 3, 4, 5, 5];
Set<int> uniqueNumbers = Set.from(numbersWithDuplicates);

print(uniqueNumbers);  // {1, 2, 3, 4, 5}

אם צריך לקבל את התוצאה בחזרה כ־List (אולי כדי לשמור על תאימות לחלקים אחרים בקוד שלך), אפשר להמיר את הקבוצה בחזרה לרשימה באמצעות toList(). כך מתקבלת רשימה שמכילה רק את האיברים הייחודיים מהמקור.

List<int> uniqueList = Set.from(numbersWithDuplicates).toList();
print(uniqueList);  // [1, 2, 3, 4, 5]

התבנית הזו של List → Set → List נפוצה מאוד כשצריך לנקות נתונים באמצעות הסרת כפילויות, תוך שמירה על מבנה הרשימה להמשך עיבוד.

challenge icon

אתגר

קל

צרו תוכנית שמנהלת מערכת לניקוי נתונים על ידי הסרת ערכים כפולים מתשובות לסקר. התוכנית שלכם צריכה:

  1. לקרוא קלט מסוג מחרוזת שמייצג את כותרת הסקר
  2. לקרוא כמה קלטים מסוג מחרוזת שמייצגים תשובות לסקר (הקלט יסתיים כשתקבלו "responses_done")
  3. ליצור List לאחסון כל התשובות המקוריות (כולל כפילויות)
  4. להשתמש ב-Set.from() כדי להמיר את הרשימה ל-Set ולהסיר כפילויות באופן אוטומטי
  5. להשתמש ב-toList() כדי להמיר את ה-Set בחזרה ל-List של תשובות ייחודיות
  6. להדפיס את תוצאות ניקוי הנתונים בפורמט המדויק שמוצג למטה

לדוגמה, אם כותרת הסקר היא "Customer Satisfaction Survey" והתשובות הן "Excellent", "Good", "Excellent", "Fair", "Good", "Excellent", "Poor", התוכנית שלכם צריכה להציג:

Survey: Customer Satisfaction Survey
Original responses: [Excellent, Good, Excellent, Fair, Good, Excellent, Poor]
Total responses collected: 7
Converting to Set to remove duplicates...
Unique responses (Set): {Excellent, Good, Fair, Poor}
Converting back to List...
Cleaned responses: [Excellent, Good, Fair, Poor]
Duplicates removed: 3
Final unique responses: 4
Status: Data cleaning completed successfully

אם כותרת הסקר היא "Product Feedback" והתשובות הן "Like", "Dislike", "Like", "Like", התוכנית שלכם צריכה להציג:

Survey: Product Feedback
Original responses: [Like, Dislike, Like, Like]
Total responses collected: 4
Converting to Set to remove duplicates...
Unique responses (Set): {Like, Dislike}
Converting back to List...
Cleaned responses: [Like, Dislike]
Duplicates removed: 2
Final unique responses: 2
Status: Data cleaning completed successfully

אם כותרת הסקר היא "Event Rating" והתשובות הן "Amazing", "Okay", "Great", התוכנית שלכם צריכה להציג:

Survey: Event Rating
Original responses: [Amazing, Okay, Great]
Total responses collected: 3
Converting to Set to remove duplicates...
Unique responses (Set): {Amazing, Okay, Great}
Converting back to List...
Cleaned responses: [Amazing, Okay, Great]
Duplicates removed: 0
Final unique responses: 3
Status: Data cleaning completed successfully

התוכנית שלכם חייבת להדגים את התבנית המלאה List → Set → List. תחילה אחסנו את כל התשובות ב-List, לאחר מכן השתמשו ב-Set.from() כדי ליצור Set מתוך ה-List, ולבסוף השתמשו ב-toList() כדי להמיר את ה-Set בחזרה ל-List. חשבו את מספר הכפילויות שהוסרו על ידי חיסור מספר הערכים הייחודיים הסופי ממספר הערכים המקורי הכולל.

נסו בעצמכם

import 'dart:io';

void main() {
  // קראו את כותרת הסקר
  String? surveyTitle = stdin.readLineSync();
  
  // קראו את התשובות לסקר עד "responses_done"
  List<String> originalResponses = [];
  String? response;
  while ((response = stdin.readLineSync()) != "responses_done") {
    if (response != null) {
      originalResponses.add(response);
    }
  }
  
  // TODO: כתבו את הקוד שלכם למטה
  // 1. השתמשו ב-Set.from() כדי להמיר את הרשימה ל-Set (מסיר כפילויות)
  // 2. השתמשו ב-toList() כדי להמיר את ה-Set בחזרה ל-List
  // 3. חשבו את מספר הכפילויות שהוסרו ואת הכמויות הסופיות
  
  // הדפיסו את התוצאות בפורמט הנדרש
  print("Survey: $surveyTitle");
  print("Original responses: $originalResponses");
  // הוסיפו כאן את שאר פקודות ההדפסה
}
quiz iconבחנו את עצמכם

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

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

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