مراجعة - قائمة ضيوف فريدة
جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 25 من 65.
التحدي
سهلقم بإنشاء برنامج يدير نظام تخطيط للفعاليات من خلال تحليل قوائم الضيوف من مصدرين مختلفين للدعوات. يجب على برنامجك القيام بما يلي:
- قراءة مدخل نصي (string) يمثل اسم الفعالية
- قراءة مدخلات نصية متعددة تمثل الضيوف من قائمة الدعوات الأولى (سينتهي الإدخال عندما تتلقى
"list1_done") - قراءة مدخلات نصية متعددة تمثل الضيوف من قائمة الدعوات الثانية (سينتهي الإدخال عندما تتلقى
"list2_done") - تحويل كلتا قائمتي الضيوف إلى مجموعات (Sets) للتعامل تلقائياً مع أي تكرارات داخل كل قائمة
- استخدام طريقة
union()للعثور على جميع الضيوف الفريدين المدعوين للفعالية - استخدام طريقة
intersection()للعثور على الضيوف الذين يظهرون في كلتا قائمتي الدعوات - استخدام طريقة
difference()للعثور على الضيوف الموجودين فقط في قائمة الدعوات الأولى - طباعة تحليل قائمة الضيوف بالتنسيق الدقيق الموضح أدناه
على سبيل المثال، إذا كان اسم الفعالية هو "Birthday Party"، وكانت القائمة الأولى تحتوي على "Alice"، "Bob"، "Charlie"، "Diana"، والقائمة الثانية تحتوي على "Bob"، "Diana"، "Eve"، "Frank"، فيجب أن يخرج برنامجك ما يلي:
Event: Birthday Party
First invitation list: {Alice, Bob, Charlie, Diana}
Second invitation list: {Bob, Diana, Eve, Frank}
All unique guests: {Alice, Bob, Charlie, Diana, Eve, Frank}
Guests on both lists: {Bob, Diana}
Guests only on first list: {Alice, Charlie}
Total unique guests: 6
Duplicate invitations: 2
First list only: 2
Status: Guest list analysis completedإذا كان اسم الفعالية هو "Wedding Reception"، وكانت القائمة الأولى تحتوي على "John"، "Mary"، "Sarah"، والقائمة الثانية تحتوي على "Tom"، "Lisa"، "Mike"، فيجب أن يخرج برنامجك ما يلي:
Event: Wedding Reception
First invitation list: {John, Mary, Sarah}
Second invitation list: {Tom, Lisa, Mike}
All unique guests: {John, Mary, Sarah, Tom, Lisa, Mike}
Guests on both lists: {}
Guests only on first list: {John, Mary, Sarah}
Total unique guests: 6
Duplicate invitations: 0
First list only: 3
Status: Guest list analysis completedإذا كان اسم الفعالية هو "Company Meeting"، وكانت القائمة الأولى تحتوي على "Alex"، "Jordan"، "Taylor"، "Morgan"، "Alex"، والقائمة الثانية تحتوي على "Jordan"، "Taylor"، "Casey"، "Jordan"، فيجب أن يخرج برنامجك ما يلي:
Event: Company Meeting
First invitation list: {Alex, Jordan, Taylor, Morgan}
Second invitation list: {Jordan, Taylor, Casey}
All unique guests: {Alex, Jordan, Taylor, Morgan, Casey}
Guests on both lists: {Jordan, Taylor}
Guests only on first list: {Alex, Morgan}
Total unique guests: 5
Duplicate invitations: 2
First list only: 2
Status: Guest list analysis completedيجب أن يوضح برنامجك جميع عمليات المجموعات الثلاث: union() لدمج جميع الضيوف، و intersection() للعثور على الضيوف الذين يظهرون في كلتا القائمتين، و difference() للعثور على الضيوف الحصريين للقائمة الأولى. قم بتحويل قوائم الإدخال إلى مجموعات (Sets) أولاً للتعامل مع أي تكرارات داخل القوائم الفردية، ثم قم بإجراء عمليات المجموعات لتحليل توزيع الضيوف.
جرّب بنفسك
import 'dart:io';
void main() {
// قراءة اسم الفعالية
String? eventName = stdin.readLineSync();
// قراءة قائمة الدعوة الأولى
List<String> firstList = [];
String? input;
while ((input = stdin.readLineSync()) != "list1_done") {
if (input != null) {
firstList.add(input);
}
}
// قراءة قائمة الدعوة الثانية
List<String> secondList = [];
while ((input = stdin.readLineSync()) != "list2_done") {
if (input != null) {
secondList.add(input);
}
}
// تحويل القوائم إلى مجموعات
Set<String> firstSet = firstList.toSet();
Set<String> secondSet = secondList.toSet();
// TODO: اكتب الكود الخاص بك أدناه
// استخدم دوال union() و intersection() و difference() لتحليل قوائم الضيوف
// حساب جميع الضيوف الفريدين، والضيوف الموجودين في كلتا القائمتين، والضيوف الموجودين في القائمة الأولى فقط
// طباعة النتائج بالتنسيق المطلوب
print("Event: $eventName");
print("First invitation list: $firstSet");
print("Second invitation list: $secondSet");
// أضف بيانات الإخراج المتبقية هنا
}جميع دروس 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المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدة