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

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

جزء من قسم Logic & Flow في رحلة 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() مثالية لدمج المجموعات ذات الصلة مع ضمان عدم وجود تكرارات، مثل دمج مجموعات المهارات، أو دمج أذونات المستخدمين، أو توحيد البيانات من مصادر متعددة.

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

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. قراءة مدخل نصي (string) يمثل اسم المشروع
  2. قراءة مدخلات نصية متعددة تمثل مهارات عضو الفريق الأول (سينتهي الإدخال عندما تتلقى "member1_done")
  3. قراءة مدخلات نصية متعددة تمثل مهارات عضو الفريق الثاني (سينتهي الإدخال عندما تتلقى "member2_done")
  4. إنشاء مجموعتين (Sets) منفصلتين لتخزين مهارات كل عضو في الفريق
  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() لدمج مجموعتي المهارات
  // البحث عن المهارات المتداخلة بين المجموعتين
  // حساب إجمالي المهارات الفريدة
  
  // إخراج النتائج بالتنسيق المطلوب
  print("Project: $projectName");
  print("Team Member 1 skills: $member1Skills");
  print("Team Member 2 skills: $member2Skills");
  // طباعة المهارات المدمجة، والعدد الإجمالي، والمهارات المتداخلة، والحالة
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow