أنواع مجموعات جدوال التجزئة والدلائل
تقوم الفئة Hashtable، و الفئات العامة Dictionary<TKey, TValue> و ConcurrentDictionary<TKey, TValue> بتطبيق الواجهةIDictionary. تقوم الفئة العامة Dictionary<TKey, TValue> أيضاً بتطبيق الواجهة عامة IDictionary<TKey, TValue>. لذلك، كل عنصر في هذه المجموعات هي زوج مفتاح و قيمة.
تتكون الفئة Hashtable من المستودعات التي تحتوي على العناصر من المجموعة. المستودع هو مجموعة فرعية ظاهرية من داخل Hashtable، و الذي يجعل البحث والاسترداد أسهل وأسرع من معظم المجموعات. يقترن كل مستودع مع شفرة تجزئة والتي يتم إنشاءها باستخدام دالة التجزئة والتي تستند إلى مفتاح العنصر.
دالة التجزئة هي خوارزمية تقوم بإرجاع شفرة تجزئة رقمية مُستندة على مفتاح. المفتاح هو قيمة بعض الخصائص من كائن يتم تخزينه. يجب أن تقوم دالة التجزئة دوماً بإرجاع نفس شفرة التجزئة بنفس المفتاح. من الممكن لدالة تجزئة أن تقوم بإنشاء شفرة تجزئة لمفتاحين مختلفين، ولكن دالة التجزئة التي تنشئ شفرة تجزئة فريدة لكل مفتاح فريد تنتج أداء أفضل عند استرداد العناصر من جدول التجزئة.
كل كائن يتم استخدامه كعنصر في Hashtable يجب أن يكون قادراً على إنشاء شفرة تجزئة لنفسه باستخدام تطبيق الأسلوب GetHashCode. ومع ذلك، يمكنك أيضاً تحديد دالة تجزئة لكافة العناصر في Hashtable باستخدام المُنشئ Hashtable الذي يقبل تطبيق IHashCodeProvider كأحد المعلمات الخاصة به.
عند إضافة كائن إلى Hashtable، يتم تخزينه في المستودع المقترن بشفرة التجزئة التي تطابق شفرة التجزئة للكائن. عندما يتم البحث عن قيمة في Hashtable، يتم إنشاء شفرة التجزئة لتلك القيمة، ويتم البحث في المستودع المقترن مع شفرة التجزئة.
على سبيل المثال، دالة التجزئة للسلسلة قد تأخذ رموز ASCII لكل حرف في السلسلة وإضافتها معاً لإنشاء شفرة تجزئة. السلسلة "picnic" قد تحتوي علي شفرة تجزئة يمكن أن تختلف عن شفرة التجزئة الخاصة بالسلسلة "basket"; لذلك، يمكن أن تختلف مستودعات سلاسل "نزهة" و "سلة". وفي المقابل، ستحتوي السلسلتين "stressed" و "desserts" علي نفس شفرة التجزئة وفي نفس المستودع.
Dictionary<TKey, TValue>و ConcurrentDictionary<TKey, TValue>clكـses أن يكون لديك نفس وظيفة كـ Hashtableclكـs. توفر Dictionary<TKey, TValue> من النوع المحدد (غير Object) أداء أفضل من Hashtable لأنواع القيم. وهذا لأن العناصر من Hashtable تكون من النوع Object; لذلك، فالتحويل إلي كائن والتحويل إلي نوع القيمة تظهر عادةً عند تخزين أو استرداد نوع القيمة. ConcurrentDictionary<TKey, TValue>يجب استخدام فئة عند مؤشرات ترابط متعددة قد يكون الوصول إلى المجموعة في نفس الوقت.
راجع أيضًا:
المرجع
System.Collections.Generic.IDictionary<TKey, TValue>
System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue>