ماهوا عمل hashtable في .net وكيف يمكن ان ستخدمة
ياريت لو حد يعرف ذلك بوضع مثال علية
ايضا كيف يمكن ان استخدم الـ Buffer وما سبب السرعة في هذا الكلاسات hashtable و Buffer
ماهوا عمل hashtable في .net وكيف يمكن ان ستخدمة
ياريت لو حد يعرف ذلك بوضع مثال علية
ايضا كيف يمكن ان استخدم الـ Buffer وما سبب السرعة في هذا الكلاسات hashtable و Buffer
التخصص : نظم معلومات - جامعة سبأ - اليمن
من مواضيعي :
السلسلة الذهبية في تعلم البرمجة [شرح عن الإجراءات والدوال function وبناء الـ Classes] .
تفضل هذا تعريف سريع منسوخ من أحد الكتب العربية بالنسبة لـ 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
عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه
نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا
ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا
محمد سامر أبو سلو
شكرا لك اخي الكريم samerselo
يعني انه عبارة عن مصفوفة لكن فهرس هذه المصفوفة لايشترط ان يكون رقم كما هوا الحال في المصفوفة العادية وإنما يمكن ان يكون الفهرس اي شي من نوع Object
التخصص : نظم معلومات - جامعة سبأ - اليمن
من مواضيعي :
السلسلة الذهبية في تعلم البرمجة [شرح عن الإجراءات والدوال function وبناء الـ Classes] .
هذا الموضوع مغلق.