اتحاد المجموعات
جزء من قسم المنطق وتدفق التنفيذ في رحلة 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() أدوات قوية لمقارنة بيانات المجموعات وعرضها، مثل دمج مجموعات مهارات الفرق وتحديد المهارات التي تتشاركها بالفعل.
التحدي
سهلأنشئ برنامجًا يدير نظامًا للتواصل المهني من خلال دمج مجموعات المهارات لأعضاء مختلفين في الفريق لإنشاء ملف شامل لمهارات المشروع. يجب أن يقوم برنامجك بما يلي:
- قراءة إدخال نصي يمثّل اسم المشروع
- قراءة عدة إدخالات نصية تمثّل مهارات عضو الفريق الأول (سينتهي الإدخال عند استلام
"member1_done") - قراءة عدة إدخالات نصية تمثّل مهارات عضو الفريق الثاني (سينتهي الإدخال عند استلام
"member2_done") - إنشاء مجموعتين منفصلتين لتخزين مهارات كل عضو من أعضاء الفريق
- استخدام طريقة
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() لدمج مجموعتي المهارات
// 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
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
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المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدةتدرّب بنفسك: مترجم Dart عبر الإنترنت