10-02-13, 12:44 PM
[COLOR="#800000"]بسم الله الرحمن الرحيم
((رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقهوا قولي))
صدق الله العلي العظيم
[/COLOR]
((رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقهوا قولي))
صدق الله العلي العظيم
[/COLOR]
السلام عليكم ورحمة الله وبركاته
سنتحدث في هذا الموضوع عن الHashtable وكيفية استخدامها والتعامل معها.
بسم الله الرحمن الرحيم
Hashtable: احدى الكائنات التابعة لمجال الاسماء System. Collection في لغة الC# يستخدم زوج من المفاتيح والقيم لخزن البيانات فيها ,حيث تستخدم المفتاح لإيجاد القيمة المطلوبة في عمليات البحث. و تكون قيمة المفتاح ثابتة لا تتغير.
كيفية تعريف Instance من HashTable:
[COLOR="#A52A2A"]اولا يجب اضافة مجال الاسماء System.Collection ومن ثم نقوم بتعريف Instance من الكائن HashTable:
[/COLOR]
PHP كود :
using System.Collections;
Hashtable htable = new Hashtable();
ومن الممكن ان نحدد كمية البيانات التي نريد اضافتها ,ذلك لان كائن الHashTable لديه 15 دالة OverLoading ومن ضمنها دالة تحديد كمية البيانات المراد اضافتها.
PHP كود :
Hashtable.Hashtable(int capacity)
كيفية اضافة البيانات الى HashTable
[COLOR="#A52A2A"]تكون الاضافة الى HashTable عن طريق اما الاسناد المباشر للمفاتيح (حيث تعتبر المفاتيح بمثابة Index في هذا النوع) او عن طريق الدالة Add حيث تقبل هذه الدالة مدخلين من نوع object صيغتها: ( Add(object key, object value) ) او عن طريق اسناد قيم اولية لها.
ملاحظه: بالإمكان ان تكون الKey والValue أي نوع من انواع المتغيرات لأنه كما قلنا كلاهما من نوع object.
اليك هذا المثال لتوضيح الشرح:[/COLOR]
PHP كود :
Hashtable htable;
//أما هكذا
htable = new Hashtable() { { 3, "jamal" } }; // اسناد قيم اولية
//او
htable.Add(1, "sajad"); // Addاستخدام دالة ال
htable.Add(2, "ahmed");
//او
htable[3] = "jameel"; // استخدام الاسناد المباشر
[COLOR="#A52A2A"]في السطر الاخير سيأخذ المفتاح (3) العنصر "jameel" مكان العنصر "jamal" ,يجوز ذلك في حالة الاسناد المباشر ,وتسمى بإعادة الاسناد (reassign)
ويجب الملاحظة انه لا يجوز اضافة قيم بنفس المفتاح مرتين اذا كنت تستخدم دالة الAdd. وأيضا من الممكن ان تكون القيم والمفاتيح من انواع اخرى او من نفس النوع من المتغيرات كالتالي:[/COLOR]
PHP كود :
htable.Add("s", "ss");
htable.Add("d", 6);
فكما تلاحظون في السطر الاول المفتاح والقيمة من نفس النوع وفي السطر الثاني المفتاح من نوع نصي والقيمة من نوع رقمي.
كيفية جلب البيانات من الHashTable:
[COLOR="#A52A2A"]بما ان مدخلات الHashtable.Add من نوع object لذا يجب عمل Casting اثناء جلب البيانات من الHashtable او مايعرف بالBoxing (هي عملية تحويل بيانات من نوع object او من نوع مرجعي الى بيانات من انواع اخرى كال int, char, …..) ,حيث يتم جلب القيم عنه طريق المفتاح.
اليك كيفية ذلك:[/COLOR]
اولا جلب البيانات عن طريق الIndex والIndex هنا يمثل المفتاح
PHP كود :
string value = htable[1] as string;
[COLOR="#A52A2A"]السطر اعلاه يقوم بجلب قيمة المفتاح (1) وخزنها في المتغير النصي (s).
او جلب جميع البيانات هكذا:[/COLOR]
PHP كود :
foreach (string value in hashtable.Values)
{
MessageBox.Show(value);
}
// او
foreach (DictionaryEntry entry in htable)
{
string value = entry.Value as string
int key = (int)entry.Key;
MessageBox.Show(key.ToString() + " :" + value);
}
//او
IDictionaryEnumerator en = hshTable.GetEnumerator();
while (en.MoveNext())
{
string value = en.Value.ToString();
}
البحث عن القيم:
يتم البحث عن القيم عن طريق الدالة ContainsValue حيث تأخذ هذه الدالة مدخل واحد من نوع object يمثل القيمة المراد البحث عنها.
PHP كود :
if (htable.ContainsValue("sajad"))
{
MessageBox.Show("Ok");
}
[COLOR="#A52A2A"]ويتم البحث عن المفاتيح عن طريق دالة الContainsKey او دالة Contains.
حيث ترجع هذه الدوال True اذا كانت القيمة او المفتاح موجودا في الHashtable و ترجع False عند عدم ايجاد القيمة او المفتاح المراد البحث عنها.[/COLOR]
حذف القيم:
يتم حذف القيم باستخدام الدال Remove حيث تأخـــذ هذه الدالة باراميتر واحد من نوع object يمثل قيمة المفتاح. اذ يتم حذف القيم عن طريق ذكر المفتاح.
PHP كود :
htable.Remove(3);
[COLOR="#A52A2A"]هنا يتم حذف قيمة المفتاح (3).
ومن الدوال المهمة ايضا دالة الClear لحذف جميع العناصر ودالة CopyTo لنسخ الازواج من قيم ومفاتيح الى مصفوفة ذات بعد واحد من نوع DictionaryEntry ودالة الCount لجب عدد الازواج الموجودة في الHashtable من (Key& Value).
اليك هذه الامثلة:[/COLOR]
PHP كود :
int c = htable.Count;// معرفة عدد الازواج
DictionaryEntry[] dic = new DictionaryEntry[c];//DictionaryEntry مصفوفة من نوع
htable.CopyTo(dic, 0);//dicالى htable نسخ من
MessageBox.Show(dic[0].Value.ToString());
htable.Clear();// مسح جميع القيم
او استخدام دالة الCopyTo لنسخ القيم فقط بدون المفاتيح هكذا:
PHP كود :
object[] o = new object[c];
htable.Values.CopyTo(o, 0);//object نسخ القيم الى مصفوفة من نوع
MessageBox.Show(o[0].ToString());
ولا تنسونا و والدي في دعواتكم و وفقنا الله واياكم لما فيه الصلاح والارشاد