دوال HashMap
جزء من قسم المنطق وتدفق التنفيذ في رحلة C# على Coddy. الدرس 52 من 66.
توفر أساليب HashMap طرقًا فعّالة للعمل مع بيانات القاموس لديك. لنستكشف بعض الأساليب الشائعة:
تحقّق مما إذا كان المفتاح موجودًا في القاموس:
Dictionary<string, int> inventory = new Dictionary<string, int>();
inventory.Add("apples", 25);
bool hasApples = inventory.ContainsKey("apples");
// ستكون قيمة hasApples هي trueاحصل على جميع المفاتيح من القاموس:
Dictionary<string, int> scores = new Dictionary<string, int>();
scores.Add("Alice", 95);
scores.Add("Bob", 87);
// احصل على جميع المفاتيح
Dictionary<string, int>.KeyCollection keys = scores.Keys;
foreach (string name in keys)
{
Console.WriteLine(name);
}احصل على جميع القيم من القاموس:
// احصل على جميع القيم
Dictionary<string, int>.ValueCollection values = scores.Values;
foreach (int score in values)
{
Console.WriteLine(score);
}أزِل عنصرًا من القاموس:
scores.Remove("Bob");
// يحتوي Dictionary الآن على درجة Alice فقطتُرجع Remove() القيمة true إذا كان المفتاح موجودًا وأُزيل، والقيمة false إذا لم يكن موجودًا. لا يُعدّ حذف مفتاح غير موجود خطأً.
امسح جميع العناصر:
scores.Clear();
// القاموس فارغ الآناحصل على عدد العناصر في القاموس باستخدام .Count:
Dictionary<string, int> scores = new Dictionary<string, int>();
scores.Add("Alice", 95);
scores.Add("Bob", 87);
int total = scores.Count;
Console.WriteLine(total);
// الناتج: 2التحدي
متوسطأنشئ أسلوبًا باسم ProcessDictionary يأخذ Dictionary<string, int> وسيطًا وينفّذ العمليات التالية:
- اطبع
Keys:متبوعةً بجميع المفاتيح (مفتاح واحد في كل سطر) - اطبع
Values:متبوعةً بجميع القيم (قيمة واحدة في كل سطر) - تحقّق مما إذا كان القاموس يحتوي على المفتاح
"total"واطبعContains 'total': TrueأوContains 'total': False - أزل المفتاح
"temp"إذا كان موجودًا - اطبع
Count:متبوعًا بعدد العناصر في القاموس بعد هذه العمليات (استخدم الخاصية.Countللقاموس)
جرّب بنفسك
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
class Program
{
static void ProcessDictionary(Dictionary<string, int> dict)
{
// اكتب شيفرتك هنا
}
// تجاهل الشيفرة الرئيسية، فهي تحوّل السلسلة النصية إلى HashMap
static void Main(string[] args)
{
Dictionary<string, int> inputDict = 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);
inputDict.Add(keyMatch, valueMatch);
}
}
ProcessDictionary(inputDict);
}
catch (Exception ex)
{
Console.WriteLine($"Error parsing input: {ex.Message}");
}
}
else
{
try
{
// Process traditional input format
int n = int.Parse(firstLine);
for (int i = 0; i < n; i++)
{
string[] pair = Console.ReadLine().Split(':');
string key = pair[0];
int value = int.Parse(pair[1]);
inputDict.Add(key, value);
}
ProcessDictionary(inputDict);
}
catch (Exception ex)
{
Console.WriteLine($"Error parsing input: {ex.Message}");
}
}
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
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البرمجة الدفاعيةملخص - أمان الـ Nullتدرّب بنفسك: مترجم C# عبر الإنترنت