لا توفر لغة C# فئة تسمى “HashMap” مباشرةً، على عكس Java. ومع ذلك، توفر فئتها Dictionary<TKey, TValue>
وظائف مكافئة وهي النهج الموصى به لعمليات خريطة التجزئة.
محتويات الجدول
استخدام Dictionary<TKey, TValue>
كخريطة تجزئة
يوفر Dictionary<TKey, TValue>
مخزنًا مفتاح-قيمة بمتوسط تعقيد زمني قدره O(1) للعمليات الشائعة مثل الإدراج والحذف والاسترجاع. يحدد TKey
نوع المفتاح، ويحدد TValue
نوع القيمة المرتبطة. دعونا نستكشف استخدامه:
إنشاء وتعبئة قاموس:
// إنشاء قاموس لتخزين السلاسل ك مفاتيح والأعداد الصحيحة كقيم.
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
// إضافة أزواج المفتاح-القيمة باستخدام Add()
myDictionary.Add("apple", 1);
myDictionary.Add("banana", 2);
myDictionary.Add("cherry", 3);
// أو استخدام بناء جملة مُهيئ المجموعة:
Dictionary<string, int> anotherDictionary = new Dictionary<string, int>()
{
{"grape", 4},
{"orange", 5}
};
الوصول إلى القيم:
استرجاع القيم باستخدام مفاتيحها. TryGetValue()
أكثر أمانًا من الفهرسة المباشرة، حيث تتعامل مع الحالات التي يكون فيها المفتاح غائبًا:
int appleCount;
if (myDictionary.TryGetValue("apple", out appleCount))
{
Console.WriteLine($"عدد التفاح: {appleCount}"); // الإخراج: عدد التفاح: 1
}
else
{
Console.WriteLine("لم يتم العثور على التفاح.");
}
// الوصول المباشر (يلقي KeyNotFoundException إذا كان المفتاح مفقودًا)
try
{
Console.WriteLine($"عدد الموز: {myDictionary["banana"]}"); // الإخراج: عدد الموز: 2
}
catch (KeyNotFoundException)
{
Console.WriteLine("لم يتم العثور على المفتاح.");
}
التكرار عبر قاموس:
Console.WriteLine("محتويات القاموس:");
foreach (KeyValuePair<string, int> kvp in myDictionary)
{
Console.WriteLine($"المفتاح: {kvp.Key}, القيمة: {kvp.Value}");
}
إزالة العناصر:
myDictionary.Remove("banana");
التحقق من وجود المفتاح:
if (myDictionary.ContainsKey("cherry"))
{
Console.WriteLine("الكرز موجود.");
}
الاستخدام المتقدم والاعتبارات
في الحالات التي تتطلب سلامة الخيوط، ضع في اعتبارك ConcurrentDictionary<TKey, TValue>
. عند اختيار المفاتيح، تأكد من أنها تُنفذ GetHashCode()
و Equals()
بشكل صحيح لتجنب التصادمات والحفاظ على كفاءة خريطة التجزئة. إن فهم هذه الجوانب أمر بالغ الأهمية لتحقيق الأداء الأمثل.
الخلاصة
Dictionary<TKey, TValue>
في C# هو المكافئ الفعال لـ HashMap، حيث يوفر أداءً ممتازًا لتخزين المفتاح-القيمة. تجعله تنوعه، بالإضافة إلى توفر بدائل آمنة للخيوط، بنية بيانات أساسية لتطبيقات C# المتنوعة.