Menu
Coddy logo textTech

סקירה כללית של List, Set ו-Map

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 63 מתוך 110.

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

רשימה היא אוסף מסודר שבו ניגשים לאיברים לפי אינדקס. האיברים שומרים על סדר ההוספה שלהם, וערכים כפולים מותרים:

var fruits = ['apple', 'banana', 'apple'];
print(fruits[0]);      // apple
print(fruits.length);  // 3

Set הוא אוסף לא מסודר של איברים ייחודיים. אם תנסה להוסיף איבר כפול, הוא פשוט ייחשב כאילו לא הוסף:

var uniqueNumbers = {1, 2, 3, 2, 1};
print(uniqueNumbers);  // {1, 2, 3}

Map מאחסן זוגות של מפתח וערך, ומאפשר לך לאתר ערכים לפי המפתח המשויך אליהם:

var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']);  // 30

הנה השוואה מהירה:

אוסףמסודרכפילויותגישה לפי
רשימהכןמותרותאינדקס
קבוצהלאלא מותרותבדיקת הכלה
מפהלא*מפתחות ייחודייםמפתח

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

challenge icon

אתגר

קל

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

תארגנו את הקוד בשני קבצים:

  • classroom.dart: צרו מחלקה בשם Classroom שמנהלת נתוני תלמידים באמצעות כל שלושת סוגי האוספים:
    • List<String> בשם attendanceOrder כדי לעקוב אחר התלמידים לפי סדר הגעתם (כפילויות מותרות אם תלמיד רושם את הגעתו כמה פעמים)
    • Set<String> בשם uniqueStudents כדי לעקוב אחר התלמידים שנוכחים (ללא כפילויות)
    • Map<String, int> בשם scores כדי לשמור את ציון המבחן של כל תלמיד
    למחלקה Classroom צריכים להיות המתודות האלה:
    • recordArrival(String name) - מוסיפה את השם גם לרשימת הנוכחות וגם לקבוצת התלמידים הייחודיים
    • setScore(String name, int score) - שומרת את ציון התלמיד במפה
    • printReport() - מדפיסה את דוח הכיתה (הפורמט מוצג בהמשך)
  • main.dart: ייבאו את קובץ הכיתה והדגימו את המערכת:
    • צרו מופע של Classroom
    • תעדו את ההגעות לפי הסדר הזה: 'Alice', 'Bob', 'Alice', 'Carol', 'Bob'
    • הגדירו ציונים: Alice = 95, Bob = 87, Carol = 92
    • קראו למתודה printReport()

המתודה printReport() אמורה להפיק:

Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}

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

הפלט הצפוי:

Arrival Order: [Alice, Bob, Alice, Carol, Bob]
Unique Students: {Alice, Bob, Carol}
Scores: {Alice: 95, Bob: 87, Carol: 92}

נסו בעצמכם

import 'classroom.dart';

void main() {
  // TODO: צרו מופע של Classroom
  
  // TODO: רשמו את ההגעות בסדר הזה: 'Alice', 'Bob', 'Alice', 'Carol', 'Bob'
  
  // TODO: הגדירו ציונים: Alice = 95, Bob = 87, Carol = 92
  
  // TODO: קראו ל־printReport() כדי להציג את נתוני הכיתה
}
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה תכנות מונחה עצמים

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