إزالة العناصر من الـ Map
جزء من قسم Logic & Flow في رحلة Dart على Coddy — الدرس 30 من 65.
عند إدارة البيانات في Map، ستحتاج غالباً إلى إزالة المدخلات التي لم تعد هناك حاجة إليها. توفر طريقة remove() وسيلة مباشرة لحذف زوج (مفتاح-قيمة) من الخريطة باستخدام مفتاحها.
تأخذ الطريقة remove() معاملًا واحدًا: مفتاح الإدخال الذي تريد حذفه. عند استدعائها، تقوم بإزالة كل من المفتاح والقيمة المرتبطة به من الخريطة (map). إذا لم يكن المفتاح موجودًا في الخريطة، فإن الطريقة ببساطة لا تفعل شيئًا دون التسبب في خطأ.
Map<String, double> inventory = {
'Laptop': 999.99,
'Mouse': 25.50,
'Keyboard': 75.00
};
// إزالة الماوس من المخزون
inventory.remove('Mouse');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}
// محاولة إزالة عنصر غير موجود لا تفعل شيئاً
inventory.remove('Tablet');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}تعد هذه الطريقة ضرورية للحفاظ على خرائط نظيفة ومحدثة في تطبيقاتك. سواء كنت تدير المخزون، أو بيانات المستخدم، أو أي مجموعة أخرى تحتاج فيها إلى إزالة العناصر، فإن remove() توفر طريقة آمنة وفعالة لحذف المدخلات بواسطة مفتاحها.
التحدي
سهلقم بإنشاء برنامج يدير خدمة بث موسيقى رقمية من خلال تتبع مكتبات الأغاني وإزالة الأغاني التي لم تعد متوفرة بسبب مشكلات الترخيص. يجب أن يقوم برنامجك بما يلي:
- قراءة مدخل نصي (string) يمثل اسم خدمة البث
- قراءة أزواج متعددة من المدخلات تمثل عناوين الأغاني وعدد مرات بثها (سينتهي الإدخال عندما تتلقى
"library_done") - قراءة مدخلات نصية متعددة تمثل الأغاني التي سيتم إزالتها بسبب مشكلات الترخيص (سينتهي الإدخال عندما تتلقى
"removal_done") - إنشاء Map لتخزين عناوين الأغاني كمفاتيح (keys) وعدد مرات بثها كقيم (values)
- استخدام طريقة
remove()لإزالة كل أغنية محددة من المكتبة - حساب إحصائيات المكتبة وطباعة تقرير الإزالة بالتنسيق الدقيق الموضح أدناه
على سبيل المثال، إذا كان اسم الخدمة هو "MusicStream Pro"، والمكتبة تتضمن "Bohemian Rhapsody" مع 2500000 بث، و "Imagine" مع 1800000 بث، و "Hotel California" مع 2200000 بث، و "Stairway to Heaven" مع 1900000 بث، وكانت الأغاني المطلوب إزالتها هي "Imagine"، و "Yesterday"، و "Hotel California"، فيجب أن تكون مخرجات برنامجك:
Service: MusicStream Pro
Original Library: {Bohemian Rhapsody: 2500000, Imagine: 1800000, Hotel California: 2200000, Stairway to Heaven: 1900000}
Removal Process:
Removing 'Imagine': Song removed (had 1800000 streams)
Removing 'Yesterday': Song not found in library
Removing 'Hotel California': Song removed (had 2200000 streams)
Updated Library: {Bohemian Rhapsody: 2500000, Stairway to Heaven: 1900000}
Library Statistics:
Songs before removal: 4
Songs after removal: 2
Songs successfully removed: 2
Songs not found: 1
Total streams lost: 4000000
Remaining total streams: 4400000
Status: Library update completedإذا كان اسم الخدمة هو "SoundWave"، والمكتبة تتضمن "Shape of You" مع 3200000 بث، و "Blinding Lights" مع 2800000 بث، و "Someone Like You" مع 2100000 بث، وكانت الأغاني المطلوب إزالتها هي "Blinding Lights"، و "Perfect"، فيجب أن تكون مخرجات برنامجك:
Service: SoundWave
Original Library: {Shape of You: 3200000, Blinding Lights: 2800000, Someone Like You: 2100000}
Removal Process:
Removing 'Blinding Lights': Song removed (had 2800000 streams)
Removing 'Perfect': Song not found in library
Updated Library: {Shape of You: 3200000, Someone Like You: 2100000}
Library Statistics:
Songs before removal: 3
Songs after removal: 2
Songs successfully removed: 1
Songs not found: 1
Total streams lost: 2800000
Remaining total streams: 5300000
Status: Library update completedإذا كان اسم الخدمة هو "AudioHub"، والمكتبة تتضمن "Bad Guy" مع 1500000 بث، و "Watermelon Sugar" مع 1700000 بث، و "Levitating" مع 1400000 بث، و "Good 4 U" مع 1600000 بث، وكانت الأغاني المطلوب إزالتها هي "Bad Guy"، و "Levitating"، و "Good 4 U"، و "Drivers License"، فيجب أن تكون مخرجات برنامجك:
Service: AudioHub
Original Library: {Bad Guy: 1500000, Watermelon Sugar: 1700000, Levitating: 1400000, Good 4 U: 1600000}
Removal Process:
Removing 'Bad Guy': Song removed (had 1500000 streams)
Removing 'Levitating': Song removed (had 1400000 streams)
Removing 'Good 4 U': Song removed (had 1600000 streams)
Removing 'Drivers License': Song not found in library
Updated Library: {Watermelon Sugar: 1700000}
Library Statistics:
Songs before removal: 4
Songs after removal: 1
Songs successfully removed: 3
Songs not found: 1
Total streams lost: 4500000
Remaining total streams: 1700000
Status: Library update completedيجب أن يستخدم برنامجك طريقة remove() لحذف الأغاني من الـ Map. تتبع الأغاني التي تمت إزالتها بنجاح وتلك التي لم يتم العثور عليها. احسب إجمالي عدد مرات البث المفقودة عن طريق جمع أعداد البث للأغاني التي تمت إزالتها بنجاح. سيكون تنسيق الإدخال كالتالي: اسم الخدمة، ثم عناوين الأغاني وأعداد البث بالتناوب (كنصوص تحتاج إلى تحويلها إلى أعداد صحيحة)، وتنتهي بـ "library_done"، تليها عناوين الأغاني المراد إزالتها وتنتهي بـ "removal_done".
ورقة مرجعية
تقوم طريقة remove() بحذف زوج مفتاح-قيمة من Map باستخدام مفتاحه:
Map<String, double> inventory = {
'Laptop': 999.99,
'Mouse': 25.50,
'Keyboard': 75.00
};
// إزالة الإدخال بواسطة المفتاح
inventory.remove('Mouse');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}
// إزالة مفتاح غير موجود لا يفعل شيئاً
inventory.remove('Tablet');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}تتعامل الطريقة بأمان مع المفاتيح غير الموجودة دون التسبب في أخطاء.
جرّب بنفسك
import 'dart:io';
void main() {
// قراءة اسم الخدمة
String? serviceName = stdin.readLineSync();
// إنشاء Map لتخزين عناوين الأغاني وعدد مرات الاستماع
Map<String, int> songLibrary = {};
// قراءة بيانات مكتبة الأغاني
while (true) {
String? input = stdin.readLineSync();
if (input == "library_done") break;
String songTitle = input!;
String? streamCountStr = stdin.readLineSync();
int streamCount = int.parse(streamCountStr!);
songLibrary[songTitle] = streamCount;
}
// قراءة الأغاني المراد إزالتها
List<String> songsToRemove = [];
while (true) {
String? input = stdin.readLineSync();
if (input == "removal_done") break;
songsToRemove.add(input!);
}
// TODO: اكتب الكود الخاص بك أدناه
// معالجة إزالة الأغاني باستخدام طريقة remove()
// تتبع الإحصائيات وإنشاء تنسيق المخرجات المطلوب
// طباعة النتائج بالتنسيق المطلوب
// تذكر تضمين: اسم الخدمة، المكتبة الأصلية، عملية الإزالة،
// المكتبة المحدثة، وإحصائيات المكتبة
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس 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المجموعات
ما هي المجموعة؟إنشاء مجموعةالإضافة والحذف من المجموعاتالتحقق من وجود عناصر في المجموعةتحويل قائمة إلى مجموعةاتحاد المجموعاتتقاطع المجموعاتالفرق بين المجموعاتمراجعة - قائمة ضيوف فريدة