Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

نظرة عامة على List و Set و Map

جزء من قسم Object Oriented Programming في رحلة Dart على Coddy — الدرس 63 من 110.

توفر Dart ثلاثة أنواع أساسية من المجموعات (collections) التي ستستخدمها باستمرار عند بناء التطبيقات. يخدم كل منها غرضاً مختلفاً لتنظيم البيانات والوصول إليها.

تُعد الـ List مجموعة مرتبة حيث يتم الوصول إلى العناصر عن طريق الفهرس (index). تحافظ العناصر على ترتيب إدراجها ويُسمح بالتكرار:

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

إليك مقارنة سريعة:

المجموعةمرتبةالتكراراتالوصول بواسطة
Listنعممسموح بهاالفهرس
Setلاغير مسموح بهاالتحقق من الاحتواء
Mapلا*مفاتيح فريدةالمفتاح

تصبح هذه المجموعات أكثر قوة عند دمجها مع generics، والتي ستستكشفها في الدروس القادمة لإنشاء مجموعات type-safe تعمل مع custom classes الخاصة بك.

challenge icon

التحدي

سهل

لنقم ببناء نظام إدارة فصل دراسي يستخدم أنواع المجموعات الثلاثة لتنظيم بيانات الطلاب بطرق مختلفة. سترى كيف تخدم كل من القوائم (Lists)، والمجموعات (Sets)، والخرائط (Maps) أغراضاً متميزة عند إدارة نفس المعلومات.

ستقوم بتنظيم الكود الخاص بك في ملفين:

  • classroom.dart: أنشئ فئة Classroom تدير بيانات الطلاب باستخدام أنواع المجموعات الثلاثة:
    • List<String> تسمى attendanceOrder لتتبع الطلاب حسب ترتيب وصولهم (يُسمح بالتكرار إذا قام الطالب بتسجيل الدخول عدة مرات)
    • Set<String> تسمى uniqueStudents لتتبع الطلاب الحاضرين (بدون تكرار)
    • Map<String, int> تسمى scores لتخزين درجة اختبار كل طالب
    يجب أن تحتوي فئة Classroom على هذه الطرق (methods):
    • recordArrival(String name) - تضيف الاسم إلى كل من قائمة الحضور ومجموعة الطلاب الفريدين
    • setScore(String name, int score) - تخزن درجة الطالب في الخريطة
    • printReport() - تطبع تقرير الفصل الدراسي (التنسيق موضح أدناه)
  • main.dart: استورد ملف الفصل الدراسي الخاص بك وقم باستعراض النظام:
    • أنشئ مثيلاً (instance) من 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}

لاحظ كيف تحفظ القائمة (List) كل عملية وصول (بما في ذلك التكرارات)، بينما تحتفظ المجموعة (Set) تلقائياً بالأسماء الفريدة فقط، وتقوم الخريطة (Map) بربط كل طالب بدرجته. كل نوع من المجموعات يخدم غرضه بشكل مثالي!

المخرجات المتوقعة:

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

ورقة مرجعية

توفر Dart ثلاثة أنواع أساسية من المجموعات (collections) لتنظيم البيانات:

List - مجموعة مرتبة حيث يتم الوصول إلى العناصر عن طريق الفهرس (index). التكرار مسموح به:

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 - تخزن أزواجاً من المفاتيح والقيم (key-value pairs) للبحث بواسطة المفتاح:

var ages = {'Alice': 30, 'Bob': 25};
print(ages['Alice']);  // 30
المجموعةمرتبةالتكراراتالوصول بواسطة
Listنعممسموح بهاالفهرس
Setلاغير مسموح بهاالتحقق من الاحتواء
Mapلا*مفاتيح فريدةالمفتاح

جرّب بنفسك

import 'classroom.dart';

void main() {
  // TODO: إنشاء مثيل (instance) من Classroom
  
  // TODO: تسجيل الوصول بهذا الترتيب: 'Alice', 'Bob', 'Alice', 'Carol', 'Bob'
  
  // TODO: تعيين الدرجات: Alice = 95, Bob = 87, Carol = 92
  
  // TODO: استدعاء printReport() لعرض بيانات الفصل الدراسي
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming