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

الفرق بين المجموعات

جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 24 من 65.

في بعض الأحيان قد تحتاج إلى العثور على العناصر الموجودة في Set واحد ولكنها ليست موجودة في آخر. تقوم طريقة difference() بحل هذه المشكلة عن طريق إنشاء مجموعة جديدة تحتوي فقط على العناصر من المجموعة الأولى التي ليست موجودة في المجموعة الثانية.

فكر في الأمر كعملية طرح للمجموعات - فأنت تقوم بإزالة جميع عناصر المجموعة الثانية من المجموعة الأولى. تُرجع الطريقة difference() مجموعة جديدة تحتوي على العناصر المتبقية، مع ترك كلتا المجموعتين الأصليتين دون تغيير.

Set<String> todaysTasks = {'email', 'meeting', 'report', 'calls'};
Set<String> completedTasks = {'email', 'calls'};

Set<String> remainingTasks = todaysTasks.difference(completedTasks);
print(remainingTasks);  // {meeting, report}

هذه العملية مفيدة بشكل خاص للعثور على ما هو مفقود، أو ما تبقى للقيام به، أو ما هو فريد لمجموعة واحدة مقارنة بأخرى. وعلى عكس التقاطع الذي يجد القواسم المشتركة، يبرز الفرق ما يجعل مجموعة واحدة متميزة عن الأخرى.

challenge icon

التحدي

سهل

قم بإنشاء برنامج يدير نظام إدارة مشاريع من خلال تحديد المهام المخطط لها والتي لم تكتمل بعد. يجب على برنامجك القيام بما يلي:

  1. قراءة مدخل نصي (string) يمثل اسم المشروع
  2. قراءة مدخلات نصية متعددة تمثل المهام المخطط لها (سينتهي الإدخال عندما تتلقى "planned_done")
  3. قراءة مدخلات نصية متعددة تمثل المهام المكتملة (سينتهي الإدخال عندما تتلقى "completed_done")
  4. إنشاء مجموعتين (Sets) منفصلتين لتخزين المهام المخطط لها والمهام المكتملة
  5. استخدام طريقة difference() للعثور على المهام المخطط لها والتي لم تكتمل بعد
  6. طباعة تحليل حالة المشروع بالتنسيق الدقيق الموضح أدناه

على سبيل المثال، إذا كان اسم المشروع هو "Website Launch"، والمهام المخطط لها هي "Design mockups"، "Write content"، "Setup database"، "Test functionality"، "Deploy site"، والمهام المكتملة هي "Design mockups"، "Setup database"، يجب أن يخرج برنامجك ما يلي:

Project: Website Launch
Planned tasks: {Design mockups, Write content, Setup database, Test functionality, Deploy site}
Completed tasks: {Design mockups, Setup database}
Remaining tasks: {Write content, Test functionality, Deploy site}
Tasks completed: 2
Tasks remaining: 3
Progress: 40.0% complete
Status: Project in progress - 3 task(s) remaining

إذا كان اسم المشروع هو "Mobile App Development"، والمهام المخطط لها هي "Create wireframes"، "Develop UI"، "Implement features"، والمهام المكتملة هي "Create wireframes"، "Develop UI"، "Implement features"، يجب أن يخرج برنامجك ما يلي:

Project: Mobile App Development
Planned tasks: {Create wireframes, Develop UI, Implement features}
Completed tasks: {Create wireframes, Develop UI, Implement features}
Remaining tasks: {}
Tasks completed: 3
Tasks remaining: 0
Progress: 100.0% complete
Status: Project completed successfully

إذا كان اسم المشروع هو "Marketing Campaign"، والمهام المخطط لها هي "Research target audience"، "Create content"، "Design graphics"، "Launch campaign"، "Analyze results"، والمهام المكتملة هي "Research target audience"، يجب أن يخرج برنامجك ما يلي:

Project: Marketing Campaign
Planned tasks: {Research target audience, Create content, Design graphics, Launch campaign, Analyze results}
Completed tasks: {Research target audience}
Remaining tasks: {Create content, Design graphics, Launch campaign, Analyze results}
Tasks completed: 1
Tasks remaining: 4
Progress: 20.0% complete
Status: Project in progress - 4 task(s) remaining

يجب أن يستخدم برنامجك طريقة difference() للعثور على المهام الموجودة في مجموعة المهام المخطط لها ولكنها ليست في مجموعة المهام المكتملة. احسب نسبة التقدم بقسمة المهام المكتملة على إجمالي المهام المخطط لها والضرب في 100، مع التقريب إلى منزلة عشرية واحدة. إذا اكتملت جميع المهام، فاعرض "Project completed successfully" كحالة، وإلا فاعرض "Project in progress - X task(s) remaining" حيث X هو عدد المهام المتبقية.

ورقة مرجعية

تنشئ الطريقة difference() مجموعة جديدة تحتوي على العناصر من المجموعة الأولى التي ليست موجودة في المجموعة الثانية:

Set<String> todaysTasks = {'email', 'meeting', 'report', 'calls'};
Set<String> completedTasks = {'email', 'calls'};

Set<String> remainingTasks = todaysTasks.difference(completedTasks);
print(remainingTasks);  // {meeting, report}

تشبه هذه العملية عملية الطرح للمجموعات - فهي تزيل جميع عناصر المجموعة الثانية من المجموعة الأولى، وتعيد مجموعة جديدة تحتوي على العناصر المتبقية مع ترك كلتا المجموعتين الأصليتين دون تغيير.

جرّب بنفسك

import 'dart:io';

void main() {
  // قراءة اسم المشروع
  String? projectName = stdin.readLineSync();
  
  // قراءة المهام المخطط لها حتى "planned_done"
  Set<String> plannedTasks = <String>{};
  String? task;
  while ((task = stdin.readLineSync()) != "planned_done") {
    if (task != null) {
      plannedTasks.add(task);
    }
  }
  
  // قراءة المهام المكتملة حتى "completed_done"
  Set<String> completedTasks = <String>{};
  while ((task = stdin.readLineSync()) != "completed_done") {
    if (task != null) {
      completedTasks.add(task);
    }
  }
  
  // TODO: اكتب الكود الخاص بك أدناه
  // استخدم طريقة difference() للعثور على المهام المتبقية
  // احسب نسبة التقدم
  // حدد حالة المشروع
  
  // طباعة النتائج
  print("Project: $projectName");
  print("Planned tasks: $plannedTasks");
  print("Completed tasks: $completedTasks");
  // أضف عبارات الإخراج المتبقية هنا
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow