اتحاد المجموعات
جزء من قسم 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() أدوات قوية لمقارنة وعرض بيانات المجموعات — على سبيل المثال، دمج مجموعات مهارات الفريق وتحديد المهارات التي يتشاركونها بالفعل.
التحدي
سهلقم بإنشاء برنامج يدير نظام تواصل مهني من خلال دمج مجموعات المهارات من أعضاء الفريق المختلفين لإنشاء ملف تعريف مهارات شامل للمشروع. يجب على برنامجك القيام بما يلي:
- قراءة مدخل نصي (string) يمثل اسم المشروع
- قراءة مدخلات نصية متعددة تمثل مهارات عضو الفريق الأول (سينتهي الإدخال عندما تتلقى
"member1_done") - قراءة مدخلات نصية متعددة تمثل مهارات عضو الفريق الثاني (سينتهي الإدخال عندما تتلقى
"member2_done") - إنشاء مجموعتين (Sets) منفصلتين لتخزين مهارات كل عضو في الفريق
- استخدام ميثود
union()لدمج مجموعتي المهارات في ملف تعريف مهارات شامل للمشروع - طباعة نتائج دمج المهارات بالتنسيق الدقيق الموضح أدناه
على سبيل المثال، إذا كان اسم المشروع هو "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");
// طباعة المهارات المدمجة، والعدد الإجمالي، والمهارات المتداخلة، والحالة
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1التعامل المتقدم مع القوائم
خصائص القائمة: first و lastحالة القائمة: isEmpty و isNotEmptyعكس القائمةالإضافة إلى القائمة: insertالحذف من القائمة: removeWhereالبحث في القائمة: indexOfفرز القائمةخلط القائمةملخص - منظم القوائم4معالجة الـ Map المتقدمة
التكرار عبر الـ Mapالتحقق من المفاتيح والقيمخصائص الـ Map: keys و valuesإضافة مشروطة: putIfAbsentإزالة العناصر من الـ Mapالـ Maps المتداخلةمراجعة - تحديث المخزون2عمليات القوائم الوظيفية
التحويل باستخدام 'map'التصفية باستخدام 'where'استخدام '.toList()'التحقق من الشروط باستخدام 'any'الشروط باستخدام 'every'البحث باستخدام 'firstWhere'مراجعة - تصفية البيانات5مشروع: حاسبة عربة التسوق
إعداد المشروعإضافة العناصر إلى العربة3المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدة