اتحاد المجموعات
جزء من قسم 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> frontendSkills = {'HTML', 'CSS', 'JavaScript'};
Set<String> backendSkills = {'JavaScript', 'Python', 'SQL'};
Set<String> sharedSkills = frontendSkills.intersection(backendSkills);
print(sharedSkills); // {JavaScript}لعرض عناصر المجموعة كسلسلة نصية واحدة قابلة للقراءة، استخدم الأسلوب join(). يمكنك تمرير سلسلة نصية فاصلة لوضعها بين كل عنصر.
Set<String> sharedSkills = {'JavaScript'};
print(sharedSkills.join(', ')); // JavaScript
Set<String> allSkills = {'HTML', 'CSS', 'JavaScript', 'Python', 'SQL'};
print(allSkills.join(', ')); // HTML, CSS, JavaScript, Python, SQLالتحدي
سهلقم بإنشاء برنامج يدير نظام شبكات مهني من خلال دمج مجموعات المهارات من أعضاء الفريق المختلفين لإنشاء ملف تعريف مهارات شامل للمشروع. يجب على برنامجك القيام بما يلي:
- قراءة مدخل نصي (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" في سطر المهارات المتداخلة.
ورقة مرجعية
تقوم طريقة 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}تقوم طريقة union() بمعالجة التكرارات تلقائياً - إذا كان العنصر نفسه موجوداً في كلتا المجموعتين، فإنه يظهر مرة واحدة فقط في المجموعة الناتجة.
تعيد طريقة intersection() مجموعة جديدة تحتوي فقط على العناصر الموجودة في كلتا المجموعتين:
Set<String> commonSkills = frontendSkills.intersection(backendSkills);
print(commonSkills); // {JavaScript}تقوم طريقة join() بتحويل مجموعة إلى String عن طريق دمج جميع العناصر، مع فاصل اختياري:
print(allSkills.join(', ')); // HTML, CSS, JavaScript, Python, SQLجرّب بنفسك
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المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدة