الإضافة والحذف من المجموعات
جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 19 من 65.
بمجرد أن يكون لديك Set، ستحتاج غالباً إلى تعديل محتوياته عن طريق إضافة عناصر جديدة أو إزالة العناصر الموجودة. توفر الطريقتان add() و remove() طرقاً مباشرة لإدارة عناصر المجموعة الخاصة بك.
تحاول الطريقة add() إدراج عنصر جديد في المجموعة. ومع ذلك، نظرًا لأن المجموعات تخزن القيم الفريدة فقط، فإذا حاولت إضافة عنصر موجود بالفعل، فلن تفعل الطريقة شيئًا ببساطة - لا يحدث أي خطأ، وتظل المجموعة دون تغيير.
Set<String> usernames = {'alice', 'bob', 'charlie'};
usernames.add('diana'); // يضيف 'diana' بنجاح
usernames.add('alice'); // لا يفعل شيئاً - 'alice' موجود بالفعل
print(usernames); // {alice, bob, charlie, diana}تعمل طريقة remove() عن طريق أخذ القيمة التي تريد حذفها وإزالتها من المجموعة. إذا لم يكن العنصر موجوداً في المجموعة، فإن الطريقة ببساطة لا تفعل شيئاً، مما يجعل استخدامها آمناً دون الحاجة للتحقق أولاً.
usernames.remove('bob'); // يزيل 'bob'
usernames.remove('unknown'); // لا يفعل شيئاً - العنصر غير موجود
print(usernames); // {alice, charlie, diana}التحدي
سهلقم بإنشاء برنامج يدير نظام تعاون جماعي عن طريق إضافة أعضاء فريق جدد وإزالة الأعضاء غير النشطين من فريق المشروع. يجب على برنامجك القيام بما يلي:
- قراءة مدخل نصي (string) يمثل اسم المشروع
- قراءة مدخلات نصية متعددة تمثل أعضاء الفريق الأوليين (سينتهي الإدخال عندما تتلقى
"initial_done") - قراءة مدخلات نصية متعددة تمثل الأعضاء الجدد المراد إضافتهم (سينتهي الإدخال عندما تتلقى
"add_done") - قراءة مدخلات نصية متعددة تمثل الأعضاء المراد إزالتهم (سينتهي الإدخال عندما تتلقى
"remove_done") - إنشاء مجموعة (Set) تضم أعضاء الفريق الأوليين
- استخدام طريقة
add()لإضافة كل عضو جديد إلى الفريق - استخدام طريقة
remove()لإزالة كل عضو محدد من الفريق - طباعة نتائج إدارة الفريق بالتنسيق الدقيق الموضح أدناه
على سبيل المثال، إذا كان اسم المشروع هو "Mobile App Development"، والأعضاء الأوليون هم "Alice"، "Bob"، "Charlie"، والأعضاء الجدد المراد إضافتهم هم "Diana"، "Alice"، "Eve"، والأعضاء المراد إزالتهم هم "Bob"، "Frank"، فيجب أن يخرج برنامجك ما يلي:
Project: Mobile App Development
Initial team: {Alice, Bob, Charlie}
Adding new members: [Diana, Alice, Eve]
After adding members: {Alice, Bob, Charlie, Diana, Eve}
Removing members: [Bob, Frank]
Final team: {Alice, Charlie, Diana, Eve}
Team size: 4
Status: Team updated successfullyإذا كان اسم المشروع هو "Website Redesign"، والأعضاء الأوليون هم "John"، "Sarah"، والأعضاء الجدد المراد إضافتهم هم "Mike"، "John"، والأعضاء المراد إزالتهم هم "Sarah"، "Unknown"، فيجب أن يخرج برنامجك ما يلي:
Project: Website Redesign
Initial team: {John, Sarah}
Adding new members: [Mike, John]
After adding members: {John, Sarah, Mike}
Removing members: [Sarah, Unknown]
Final team: {John, Mike}
Team size: 2
Status: Team updated successfullyإذا كان اسم المشروع هو "Data Analysis"، والأعضاء الأوليون هم "Emma"، والأعضاء الجدد المراد إضافتهم هم "Tom"، "Lisa"، والأعضاء المراد إزالتهم هم "Emma"، فيجب أن يخرج برنامجك ما يلي:
Project: Data Analysis
Initial team: {Emma}
Adding new members: [Tom, Lisa]
After adding members: {Emma, Tom, Lisa}
Removing members: [Emma]
Final team: {Tom, Lisa}
Team size: 2
Status: Team updated successfullyيجب أن يثبت برنامجك أن طريقة add() لا تفعل شيئاً عند محاولة إضافة عضو موجود بالفعل، وأن طريقة remove() لا تفعل شيئاً عند محاولة إزالة عضو غير موجود. قم بتخزين قوائم المدخلات لإظهار العمليات التي تمت محاولتها، ثم اعرض محتويات المجموعة (Set) بعد كل عملية لإظهار الطبيعة الفريدة للمجموعات.
ورقة مرجعية
استخدم add() لإدراج عناصر في Set. إذا كان العنصر موجوداً بالفعل، فلن يحدث شيء:
Set<String> usernames = {'alice', 'bob', 'charlie'};
usernames.add('diana'); // Adds 'diana' successfully
usernames.add('alice'); // Does nothing - 'alice' already exists
print(usernames); // {alice, bob, charlie, diana}استخدم remove() لحذف عناصر من Set. إذا لم يكن العنصر موجوداً، فلن يحدث شيء:
usernames.remove('bob'); // Removes 'bob'
usernames.remove('unknown'); // Does nothing - element not found
print(usernames); // {alice, charlie, diana}جرّب بنفسك
import 'dart:io';
void main() {
// قراءة اسم المشروع
String? projectName = stdin.readLineSync();
// قراءة أعضاء الفريق الأوليين
List<String> initialMembers = [];
String? member;
while ((member = stdin.readLineSync()) != "initial_done") {
initialMembers.add(member!);
}
// قراءة الأعضاء الجدد المراد إضافتهم
List<String> membersToAdd = [];
while ((member = stdin.readLineSync()) != "add_done") {
membersToAdd.add(member!);
}
// قراءة الأعضاء المراد إزالتهم
List<String> membersToRemove = [];
while ((member = stdin.readLineSync()) != "remove_done") {
membersToRemove.add(member!);
}
// TODO: اكتب الكود الخاص بك أدناه
// إنشاء Set مع أعضاء الفريق الأوليين
// إضافة أعضاء جدد باستخدام طريقة add()
// إزالة الأعضاء باستخدام طريقة remove()
// طباعة النتائج بالتنسيق المطلوب
print("Project: $projectName");
// أضف بيانات الطباعة المتبقية هنا
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس 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المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدة