تعديل القواميس
جزء من قسم Logic & Flow في رحلة C# على Coddy — الدرس 50 من 66.
القواميس (Dictionaries) في C# قابلة للتغيير (mutable)، مما يعني أنه يمكنك تعديلها بعد إنشائها. إليك الطرق الشائعة لتعديل Dictionary:
أضف زوج مفتاح-قيمة جديدًا:
Dictionary<string, int> inventory = new Dictionary<string, int>();
inventory.Add("apple", 10);تحديث قيمة مفتاح موجود:
// تحقق أولاً مما إذا كان المفتاح موجوداً
if (inventory.ContainsKey("apple"))
{
inventory["apple"] = 15; // تحديث "apple" لتصبح القيمة 15
}إزالة زوج مفتاح-قيمة:
// إزالة إدخال "apple"
inventory.Remove("apple");مسح جميع المدخلات:
// إزالة كافة أزواج المفتاح والقيمة
inventory.Clear();التحدي
سهلقم بإنشاء طريقة (method) تسمى UpdateInventory تأخذ ثلاث وسائط:
- Dictionary<string, int> يمثل المخزون (inventory)
- سلسلة نصية (string) تمثل اسم العنصر (item name)
- عدد صحيح (int) يمثل الكمية الجديدة (new quantity)
يجب أن تقوم الطريقة بما يلي:
- إذا كان العنصر موجوداً في المخزون، فقم بتحديث كميته
- إذا لم يكن العنصر موجوداً، فقم بإضافته بالكمية المعطاة
- اطبع المخزون المحدث بالتنسيق التالي: "Item: [quantity]" (عنصر واحد في كل سطر)
ورقة مرجعية
القواميس (Dictionaries) في لغة C# قابلة للتغيير ويمكن تعديلها بعد إنشائها.
إضافة زوج مفتاح-قيمة جديد:
Dictionary<string, int> inventory = new Dictionary<string, int>();
inventory.Add("apple", 10);تحديث قيمة مفتاح موجود:
// تحقق أولاً مما إذا كان المفتاح موجوداً
if (inventory.ContainsKey("apple"))
{
inventory["apple"] = 15; // يقوم بتحديث "apple" لتصبح القيمة 15
}إزالة زوج مفتاح-قيمة:
// إزالة إدخال "apple"
inventory.Remove("apple");مسح جميع الإدخالات:
// إزالة جميع أزواج المفتاح-القيمة
inventory.Clear();جرّب بنفسك
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
class Program
{
public static void UpdateInventory(Dictionary<string, int> inventory, string item, int quantity)
{
// اكتب كودك هنا
// اطبع المخزون المحدث
// لا تقم بإزالة هذا
foreach (KeyValuePair<string, int> entry in inventory)
{
Console.WriteLine($"{entry.Key}: {entry.Value}");
}
}
// تجاهل الكود الرئيسي، فهو يقوم بتحويل string إلى HashMap
static void Main(string[] args)
{
Dictionary<string, int> inventory = new Dictionary<string, int>();
// اقرأ السطر الأول للتحقق مما إذا كان بتنسيق JSON
string firstLine = Console.ReadLine();
// تحقق مما إذا كان الإدخال بتنسيق JSON
if (firstLine != null && firstLine.StartsWith("{") && firstLine.EndsWith("}"))
{
try
{
// معالجة إدخال JSON للمخزون الأولي
string jsonContent = firstLine.Substring(1, firstLine.Length - 2);
// التقسيم بواسطة الفواصل التي ليست داخل علامات الاقتباس
string pattern = @",(?=(?:[^""]*""[^""]*"")*[^""]*$)";
string[] entries = Regex.Split(jsonContent, pattern);
foreach (string entry in entries)
{
// استخراج المفتاح والقيمة باستخدام regex
Match match = Regex.Match(entry, @"""([^""]+)""\s*:\s*(\d+)");
if (match.Success)
{
string keyMatch = match.Groups[1].Value;
int valueMatch = int.Parse(match.Groups[2].Value);
inventory.Add(keyMatch, valueMatch);
}
}
// Read the item to update and its quantity
string updateItemJson = Console.ReadLine();
// Check if update item is in JSON format with quotes
Match itemMatch = Regex.Match(updateItemJson, @"""([^""]+)""");
string updateItem = itemMatch.Success ? itemMatch.Groups[1].Value : updateItemJson;
int updateQuantity = int.Parse(Console.ReadLine());
UpdateInventory(inventory, updateItem, updateQuantity);
}
catch (Exception ex)
{
Console.WriteLine($"Error parsing input: {ex.Message}");
}
}
else
{
try
{
// Process traditional input format
int initialCount = int.Parse(firstLine);
for (int i = 0; i < initialCount; i++)
{
string item = Console.ReadLine();
int quantity = int.Parse(Console.ReadLine());
inventory.Add(item, quantity);
}
// Read the item to update and its quantity
string updateItem = Console.ReadLine();
int updateQuantity = int.Parse(Console.ReadLine());
UpdateInventory(inventory, updateItem, updateQuantity);
}
catch (Exception ex)
{
Console.WriteLine($"Error parsing input: {ex.Message}");
}
}
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادتعريف وتهيئة المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادالمصفوفات المتعرجة (Jagged Arrays)عمليات المصفوفات الشائعةمراجعة - المصفوفات متعددة الأبعاد4تقنيات التحكم في التدفق
الإرجاع المبكرشروط الحمايةجمل القفز (goto)Break و Continueتسطيح الشروط المتداخلة7المعاملات المنطقية المتقدمة
التقييم المختصرالمعاملات المنطقية الشرطيةأولوية المعاملاتمراجعة - المعاملات المتقدمة2اتخاذ القرارات المتقدم
الشروط المتعددةالمنطق البولياني المعقدمقارنة بين If و Switchجمل Switch المتداخلةمراجعة - القرارات المتقدمة5معالجة الاستثناءات
أساسيات Try-Catchأنواع الاستثناءاتكتل Catch المتعددةالتعامل مع الملفاتكتلة FinallyUsing مقابل Try-Finallyاستثناءات مخصصةمراجعة - معالجة الأخطاء8نظام تحليل البيانات
إعداد جمع البياناتمنطق إدخال البيانات11HashSet الجزء الأول
ما هو الـ HashSet؟إضافة عنصرحذف عنصرالتحقق من وجود عنصرالفراغ والحجمملخص - HashSet3تحسينات الحلقات التكرارية
أداء الحلقات التكراريةالتكرار عبر البيانات المعقدةأنواع الحلقات التكراريةإعادة هيكلة الحلقات التكراريةملخص - الحلقات المحسنة6التعامل مع الـ Null
أساسيات الـ Null Referenceأنواع القيم القابلة للـ Nullأنماط التحقق من الـ Nullالبرمجة الدفاعيةملخص - أمان الـ Null9HashMap الجزء الأول
ما هو الـ HashMap؟تعريف HashMapالتحقق من وجود المفتاحالوصول إلى القيمتعديل القواميسملخص - HashMap