Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

إزالة العناصر من الـ 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() توفر طريقة آمنة وفعالة لحذف المدخلات بواسطة مفتاحها.

challenge icon

التحدي

سهل

قم بإنشاء برنامج يدير خدمة بث موسيقى رقمية من خلال تتبع مكتبات الأغاني وإزالة الأغاني التي لم تعد متوفرة بسبب مشكلات الترخيص. يجب أن يقوم برنامجك بما يلي:

  1. قراءة مدخل نصي (string) يمثل اسم خدمة البث
  2. قراءة أزواج متعددة من المدخلات تمثل عناوين الأغاني وعدد مرات بثها (سينتهي الإدخال عندما تتلقى "library_done")
  3. قراءة مدخلات نصية متعددة تمثل الأغاني التي سيتم إزالتها بسبب مشكلات الترخيص (سينتهي الإدخال عندما تتلقى "removal_done")
  4. إنشاء Map لتخزين عناوين الأغاني كمفاتيح (keys) وعدد مرات بثها كقيم (values)
  5. استخدام طريقة remove() لإزالة كل أغنية محددة من المكتبة
  6. حساب إحصائيات المكتبة وطباعة تقرير الإزالة بالتنسيق الدقيق الموضح أدناه

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

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow