الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مافائدة hashtable

مغلق
بدأه فواز الشمري في 21 أكتوبر 2005 · 2 رد · 621 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

ماهوا عمل hashtable في .net وكيف يمكن ان ستخدمة

ياريت لو حد يعرف ذلك بوضع مثال علية

ايضا كيف يمكن ان استخدم الـ Buffer وما سبب السرعة في هذا الكلاسات hashtable و Buffer

#2

تفضل هذا تعريف سريع منسوخ من أحد الكتب العربية بالنسبة لـ Hashtable ولكن أعترف أن الموضوع أكبر من هذه العجالة بكثير

مجموعة الجدول المختلط HashTable Collection:

الميزة الرئيسيّة في الجدول المختلط، هي قدرته على التعامل مع العنصر بالرمز الدالّ عليه Key، بدلا من رقم الخانة.. معنى هذا أنّك تخزّن معلومتين لكلّ عنصر في الجدول: القيمة Value والرمز Key.

ونظرا للتشابه الجليّ بين الجدول المختلط والمصفوفة القائمة، فسنركّز هنا على الاختلافات، وعليك أنت باستطلاع باقي الخصائص والوسائل، والتي لن تكون جديدة عليك.

ولاستخدام هذه الخليّة، ابدأ بتعريف متغيّر من نوعها، كالتالي:

Dim hTable As New HashTable

ولإضافة العناصر، استخدم الصيغة التالية:

hTable.Add(رمز, قيمة)

حيث الرمز هو أي نصّ مسموح به، والقيمة من أي نوع (يمكن أن تكون كائنا).

انظر للمثال التالي، لتخزين درجات حرارة مدينتين:

Dim Temperatures As New HashTable

Temperatures.Add("القاهرة", 30)

Temperatures.Add("دمياط", 25)

أهمّ ما يجب أن تراعيه، هو أنّ الرمز يجب أن يكون فريدا Unique لكلّ قيمة، حيثُ لن يُسمح لك بتكرار الرموز.

ملحوظة:

يمكن أن يكون الرمز Key أيّ نوع من الكائنات Objects وليس نصوصا فقط.. في هذه الحالة يستخدم الجدول المختلط الوسيلتين GetHashCode و Equals، اللتين تخصّان كلّ كائن، ليعرف على أيّ أساس سيقارن الرموز ويقوم بترتيبها.. وبإمكانك أن تعيد تعريف هاتين الوسيلتين، لتحدّد الكيفيّة التي على أساسها تتمّ مقارنة كلّ كائنين معا.. (راجع موضع تخصيص الأعضاء الافتراضيّة في الفصل 7، إنشاء الخليّة الصغرى).

ولتغيير درجة حرارة مدينة دمياط بعد ذلك، استخدم جملة كالتالية:

Temperatures.Item("دمياط") = 20

أو باختصار:

Temperatures("دمياط") = 20

ولحذف أيّ عنصر من الجدول، يمكنك حذفه عن طريق رمزه، ولا توجد وسيلة غير هذه:

hTable.Remove(رمز العنصر)

وللتأكّد ممّا إذا كان أحد الرموز مستخدما في الجدول، استخدم الوسيلة المنطقيّة Boolean "يحتوي على الرمز" ContainsKey، حيث تعطيك القيمة True إذا كان الرمز موجودا في الجدول:

hTable.ContainsKey(رمز)

ولسبب ما، توجد وسلة أخرى مماثلة لنفس هذه الوسيلة تماما في كلّ شيء إلا في الاسم، وهي Contains:

hTable.ContainsKey(رمز)

مثال:

Dim value As New Rectangle(100, 100, 50, 50)

Dim key As String = "object1"

If Not hTable.ContainsKey(key) Then

hTable.Add(key, value)

End If

وبالمثل لديك الوسيلة ContainsValue للتأكّد من وجود قيمة ما في الجدول:

hTable.ContainsValue(قيمة)

وللتعامل مع رموز الجدول، يمكنك استخدام مجموعة الرموز Keys Collection، وللتعامل مع القيم، استخدم مجموعة القيم Values Collection، ولهما نفس الأعضاء التقليديّة للمجموعات.. انظر للمثال التالي الذي يريك كيف تمرّ على كلّ قيم الجدول:

Dim itm As Object

For Each itm In hTable.Values

Console.WriteLine(itm)

Next

والدالة التالية تريك كيف يمكن المرور عبر كل عناصر الجدول المختلط:

Private Function ShowHashTableContents(ByVal table As Hashtable) As String

Dim msg As String

Dim element, key As Object

msg = "الجدول يحتوي على " & table.Count.tostring & " من العناصر"

For Each key In table.keys

element = table.Item(key)

msg = msg & vbCrLf

msg += " نوع العنصر = " & element.GetType.ToString & vbCrLf

msg = msg & " رمز العنصر= " & Key.ToString

msg += " قيمة العنصر= " & element.ToString & vbCrLf

Next

Return(msg)

End Function

ولتجربة هذه الدالّة استخدم الكود التالي:

Dim HT As New HashTable

' الكود المناسب لملء الجدول المختلط بالعناصر

MsgBox (ShowHashTableContents(HT))

وهناك طريقة أخرى للمرور عبر عناصر الجدول.. إنّ كلّ عنصر من عناصره يتكوّن، من رمز وقيمة.. لهذا فإنّ هذا العنصر هو سجلّ من النوع DictionaryEntry.. لهذا يمكنك استخدام الكود التالي للمرور عبر كلّ عناصر الجدول:

Dim HEntry As DictionaryEntry

For Each HEntry In hTable

Console.WriteLine(HEntry.Key)

Console.WriteLine(HEntry.Value)

Next

تم تعديل هذه المشاركة بواسطة samerselo في 22 أكتوبر 2005 في 00:31

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3

شكرا لك اخي الكريم samerselo

يعني انه عبارة عن مصفوفة لكن فهرس هذه المصفوفة لايشترط ان يكون رقم كما هوا الحال في المصفوفة العادية وإنما يمكن ان يكون الفهرس اي شي من نوع Object

هذا الموضوع مغلق.

مواضيع مشابهة