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

اتحاد المجموعات

جزء من قسم المنطق وتدفق التنفيذ في رحلة Dart على Coddy. الدرس 22 من 65.

عندما يكون لديك مجموعتا Set منفصلتان، يمكنك دمجهما في مجموعة واحدة تحتوي على جميع العناصر الفريدة من كلتيهما باستخدام الطريقة union(). تنشئ هذه العملية مجموعة جديدة تتضمن كل عنصر يظهر في أيٍّ من المجموعتين الأصليتين.

تتعامل طريقة union() تلقائيًا مع التكرارات نيابةً عنك. إذا كان العنصر نفسه موجودًا في كلتا المجموعتين، فسيظهر مرة واحدة فقط في مجموعة الاتحاد الناتجة، مع الحفاظ على الخاصية الأساسية التي تضمن أن المجموعات تحتوي على قيم فريدة فقط.

Set<String> frontendSkills = {'HTML', 'CSS', 'JavaScript'};
Set<String> backendSkills = {'JavaScript', 'Python', 'SQL'};

Set<String> allSkills = frontendSkills.union(backendSkills);
print(allSkills);  // {HTML, CSS, JavaScript, Python, SQL}

لاحظ كيف تظهر 'JavaScript' في كلتا المجموعتين الأصليتين، ولكن مرة واحدة فقط في نتيجة الاتحاد. وهذا يجعل union() مثاليًا لدمج المجموعات ذات الصلة مع ضمان عدم وجود تكرارات، مثل دمج مجموعات المهارات، أو الجمع بين أذونات المستخدمين، أو توحيد البيانات من مصادر متعددة.

للعثور على العناصر التي تظهر في both مجموعتين، استخدم intersection() method. يعيد مجموعة جديدة تحتوي على العناصر المشتركة فقط:

Set<String> sharedSkills = frontendSkills.intersection(backendSkills);
print(sharedSkills);  // {JavaScript}

بمجرد أن يكون لديك مجموعة من العناصر المتداخلة، يمكنك تحويلها إلى سلسلة نصية قابلة للقراءة باستخدام الطريقة join(). تعمل هذه الطريقة بالطريقة نفسها كما هو الحال مع List. فهي تربط جميع العناصر في سلسلة نصية واحدة باستخدام فاصل تقدّمه:

Set<String> overlap = frontendSkills.intersection(backendSkills);
String result = overlap.isEmpty ? 'None' : overlap.join(', ');
print(result);  // JavaScript

معًا، تمنحك union() وintersection() وjoin() أدوات قوية لمقارنة بيانات المجموعات وعرضها، مثل دمج مجموعات مهارات الفرق وتحديد المهارات التي تتشاركها بالفعل.

challenge icon

التحدي

سهل

أنشئ برنامجًا يدير نظامًا للتواصل المهني من خلال دمج مجموعات المهارات لأعضاء مختلفين في الفريق لإنشاء ملف شامل لمهارات المشروع. يجب أن يقوم برنامجك بما يلي:

  1. قراءة إدخال نصي يمثّل اسم المشروع
  2. قراءة عدة إدخالات نصية تمثّل مهارات عضو الفريق الأول (سينتهي الإدخال عند استلام "member1_done")
  3. قراءة عدة إدخالات نصية تمثّل مهارات عضو الفريق الثاني (سينتهي الإدخال عند استلام "member2_done")
  4. إنشاء مجموعتين منفصلتين لتخزين مهارات كل عضو من أعضاء الفريق
  5. استخدام طريقة union() لدمج مجموعتي المهارات في ملف شامل لمهارات المشروع
  6. طباعة نتائج دمج المهارات بالتنسيق المطابق تمامًا للتنسيق الموضح أدناه

على سبيل المثال، إذا كان اسم المشروع هو "Web Development Project"، وكانت مهارات العضو الأول هي "HTML" و"CSS" و"JavaScript" و"React"، وكانت مهارات العضو الثاني هي "JavaScript" و"Node.js" و"MongoDB" و"React"، فيجب أن يطبع برنامجك ما يلي:

Project: Web Development Project
Team Member 1 skills: {HTML, CSS, JavaScript, React}
Team Member 2 skills: {JavaScript, Node.js, MongoDB, React}
Combined project skills: {HTML, CSS, JavaScript, React, Node.js, MongoDB}
Total unique skills available: 6
Overlapping skills: JavaScript, React
Status: Project skill profile created successfully

إذا كان اسم المشروع هو "Mobile App Development"، وكانت مهارات العضو الأول هي "Dart" و"Flutter" و"Firebase"، وكانت مهارات العضو الثاني هي "Swift" و"iOS" و"Xcode"، فيجب أن يطبع برنامجك ما يلي:

Project: Mobile App Development
Team Member 1 skills: {Dart, Flutter, Firebase}
Team Member 2 skills: {Swift, iOS, Xcode}
Combined project skills: {Dart, Flutter, Firebase, Swift, iOS, Xcode}
Total unique skills available: 6
Overlapping skills: None
Status: Project skill profile created successfully

إذا كان اسم المشروع هو "Data Science Project"، وكانت مهارات العضو الأول هي "Python" و"Pandas" و"NumPy" و"SQL"، وكانت مهارات العضو الثاني هي "Python" و"SQL" و"Tableau" و"Statistics"، فيجب أن يطبع برنامجك ما يلي:

Project: Data Science Project
Team Member 1 skills: {Python, Pandas, NumPy, SQL}
Team Member 2 skills: {Python, SQL, Tableau, Statistics}
Combined project skills: {Python, Pandas, NumPy, SQL, Tableau, Statistics}
Total unique skills available: 6
Overlapping skills: Python, SQL
Status: Project skill profile created successfully

يجب أن يستخدم برنامجك طريقة union() لدمج مجموعتي المهارات، موضحًا كيف تتعامل تلقائيًا مع التكرارات. اعرض مجموعتي المهارات الفرديتين أولًا، ثم النتيجة المدمجة. حدّد أي مهارات متداخلة من خلال العثور على المهارات التي تظهر في كلتا المجموعتين الأصليتين. إذا لم تكن هناك مهارات متداخلة، فاعرض "None" في سطر المهارات المتداخلة.

التنسيق المطلوب للإخراج: [المحتوى المترجم هنا]

جرّب بنفسك

import 'dart:io';

void main() {
  // اقرأ اسم المشروع
  String? projectName = stdin.readLineSync();
  
  // اقرأ مهارات عضو الفريق الأول
  Set<String> member1Skills = <String>{};
  String? skill;
  while ((skill = stdin.readLineSync()) != "member1_done") {
    if (skill != null) {
      member1Skills.add(skill);
    }
  }
  
  // اقرأ مهارات عضو الفريق الثاني
  Set<String> member2Skills = <String>{};
  while ((skill = stdin.readLineSync()) != "member2_done") {
    if (skill != null) {
      member2Skills.add(skill);
    }
  }
  
  // TODO: اكتب الكود الخاص بك أدناه
  // استخدم الطريقة union() لدمج مجموعتي المهارات
  // Find overlapping skills between the two sets
  // Calculate total unique skills
  
  // أخرج النتائج بالتنسيق المطلوب
  print("Project: $projectName");
  print("Team Member 1 skills: $member1Skills");
  print("Team Member 2 skills: $member2Skills");
  // Print combined skills, total count, overlapping skills, and status
}
quiz iconاختبر نفسك

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

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم Dart عبر الإنترنت