Menu
Coddy logo textTech

Maps מקוננים

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

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

מפה מקוננת היא פשוט Map שהערכים בה הם בעצמם אובייקטים מסוג Map. המבנה הזה מושלם לייצוג נתונים שיש בהם קטגוריות ותת־קטגוריות, כמו פרופילי משתמשים עם פרטים רבים, או קטלוגים של מוצרים עם מאפיינים שונים.

Map<String, Map<String, dynamic>> userProfiles = {
  'alice': {
    'email': 'alice@example.com',
    'age': 28
  },
  'bob': {
    'email': 'bob@example.com',
    'age': 32
  }
};

print(userProfiles['alice']['email']);  // alice@example.com
print(userProfiles['bob']['age']);      // 32

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

challenge icon

אתגר

קל

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

  1. לקרוא קלט מסוג מחרוזת שמייצג את שם החברה
  2. לקרוא כמה קבוצות של קלטים שמייצגות נתוני עובדים (הקלט יסתיים כשתקבלו "employees_done"). לכל עובד יהיו:
    • שם (מחרוזת)
    • מחלקה (מחרוזת)
    • משכורת (מחרוזת שיש להמיר למספר שלם)
    • שנות ניסיון (מחרוזת שיש להמיר למספר שלם)
  3. לקרוא קלט מסוג מחרוזת שמייצג מזהה עובד לחיפוש
  4. ליצור Map מקוננת שבה כל מזהה עובד הוא מפתח, והערך הוא Map נוספת שמכילה את פרטי העובד
  5. לגשת למידע של עובד מסוים ולהציג אותו באמצעות גישה למפה מקוננת
  6. לחשב נתונים סטטיסטיים לפי מחלקה ולהדפיס את דוח ספריית העובדים בדיוק בפורמט שמוצג למטה

לדוגמה, אם שם החברה הוא "TechCorp Solutions", נתוני העובדים כוללים את "EMP001" עם השם "Alice Johnson", המחלקה "Engineering", המשכורת 75000, הניסיון 5, את "EMP002" עם השם "Bob Smith", המחלקה "Marketing", המשכורת 60000, הניסיון 3, את "EMP003" עם השם "Carol Davis", המחלקה "Engineering", המשכורת 80000, הניסיון 7, ומזהה העובד לחיפוש הוא "EMP001", התוכנית שלכם צריכה להפיק:

Company: TechCorp Solutions
Employee Directory: {EMP001: {name: Alice Johnson, department: Engineering, salary: 75000, experience: 5}, EMP002: {name: Bob Smith, department: Marketing, salary: 60000, experience: 3}, EMP003: {name: Carol Davis, department: Engineering, salary: 80000, experience: 7}}
Employee Lookup (EMP001):
Name: Alice Johnson
Department: Engineering
Salary: $75000
Experience: 5 years
Department Analysis:
Engineering employees: 2
Marketing employees: 1
Total employees: 3
Average salary: $71666
Status: Employee directory processed successfully

אם שם החברה הוא "Global Industries", נתוני העובדים כוללים את "E100" עם השם "David Wilson", המחלקה "Sales", המשכורת 55000, הניסיון 4, את "E101" עם השם "Emma Brown", המחלקה "HR", המשכורת 65000, הניסיון 6, ומזהה העובד לחיפוש הוא "E101", התוכנית שלכם צריכה להפיק:

Company: Global Industries
Employee Directory: {E100: {name: David Wilson, department: Sales, salary: 55000, experience: 4}, E101: {name: Emma Brown, department: HR, salary: 65000, experience: 6}}
Employee Lookup (E101):
Name: Emma Brown
Department: HR
Salary: $65000
Experience: 6 years
Department Analysis:
Sales employees: 1
HR employees: 1
Total employees: 2
Average salary: $60000
Status: Employee directory processed successfully

אם שם החברה הוא "StartupHub", נתוני העובדים כוללים את "S001" עם השם "Frank Miller", המחלקה "Development", המשכורת 70000, הניסיון 2, את "S002" עם השם "Grace Lee", המחלקה "Design", המשכורת 58000, הניסיון 3, את "S003" עם השם "Henry Chen", המחלקה "Development", המשכורת 72000, הניסיון 4, את "S004" עם השם "Ivy Taylor", המחלקה "Marketing", המשכורת 62000, הניסיון 5, ומזהה העובד לחיפוש הוא "S003", התוכנית שלכם צריכה להפיק:

Company: StartupHub
Employee Directory: {S001: {name: Frank Miller, department: Development, salary: 70000, experience: 2}, S002: {name: Grace Lee, department: Design, salary: 58000, experience: 3}, S003: {name: Henry Chen, department: Development, salary: 72000, experience: 4}, S004: {name: Ivy Taylor, department: Marketing, salary: 62000, experience: 5}}
Employee Lookup (S003):
Name: Henry Chen
Department: Development
Salary: $72000
Experience: 4 years
Department Analysis:
Development employees: 2
Design employees: 1
Marketing employees: 1
Total employees: 4
Average salary: $65500
Status: Employee directory processed successfully

על התוכנית שלכם ליצור מבנה Map מקונן, שבו המפה החיצונית משתמשת במזהי עובדים כמפתחות, וכל ערך הוא מפה פנימית שמכילה את "name", "department", "salary" ו-"experience" כמפתחות. השתמשו בגישה למפה מקוננת באמצעות סוגריים מרובעים כפולים כדי לקבל מידע על עובד מסוים. ספרו את העובדים בכל מחלקה וחשבו את המשכורת הממוצעת על ידי חלוקת סכום המשכורות הכולל במספר העובדים. פורמט הקלט יהיה: שם החברה, לאחר מכן קבוצות של חמישה ערכים (מזהה עובד, שם, מחלקה, משכורת, ניסיון) שמסתיימות ב-"employees_done", ולאחר מכן מזהה העובד לחיפוש.

נסו בעצמכם

import 'dart:io';

void main() {
  // קרא את שם החברה
  String? companyName = stdin.readLineSync();
  
  // אתחל מפה מקוננת עבור ספר העובדים
  Map<String, Map<String, dynamic>> employeeDirectory = {};
  
  // קרא נתוני עובדים עד "employees_done"
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "employees_done") {
      break;
    }
    
    String employeeId = input!;
    String? name = stdin.readLineSync();
    String? department = stdin.readLineSync();
    String? salaryStr = stdin.readLineSync();
    String? experienceStr = stdin.readLineSync();
    
    // המר את השכר ואת שנות הניסיון למספרים שלמים
    int salary = int.parse(salaryStr!);
    int experience = int.parse(experienceStr!);
    
    // TODO: צור מבנה מפה מקוננת לכל עובד והוסף אותו לספר העובדים
    
  }
  
  // קרא את מזהה העובד לחיפוש
  String? lookupId = stdin.readLineSync();
  
  // TODO: כתוב את הקוד שלך להלן כדי:
  // 1. להציג את שם החברה ואת ספר העובדים
  // 2. לחפש ולהציג מידע על עובד מסוים
  // 3. לחשב נתונים סטטיסטיים לפי מחלקה
  // 4. לחשב את השכר הממוצע
  // 5. להדפיס את הדוח המלא בפורמט הנדרש
  
}
quiz iconבחנו את עצמכם

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

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

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