منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : Dealing with Hashtable in CSharp
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
[COLOR="#800000"]بسم الله الرحمن الرحيم
((رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقهوا قولي))
صدق الله العلي العظيم

[/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(dic0);//dicالى  htable  نسخ من 
MessageBox.Show(dic[0].Value.ToString());
htable.Clear();// مسح جميع القيم 

او استخدام دالة الCopyTo لنسخ القيم فقط بدون المفاتيح هكذا:

PHP كود :
object[] = new object[c];
htable.Values.CopyTo(o0);//object نسخ القيم الى مصفوفة من نوع 
MessageBox.Show(o[0].ToString()); 

ولا تنسونا و والدي في دعواتكم و وفقنا الله واياكم لما فيه الصلاح والارشاد
السلام عليكم

شكرا لك على هذا الشرح المميز

يعطيك العافية
[COLOR="#800000"]
abulayth كتب :السلام عليكم

شكرا لك على هذا الشرح المميز

يعطيك العافية

عليكم السلام اخي الكريم

بارك الله فيك شكرا على التعليقSmile

[/COLOR]
وعليكم السلام ورحمة الله
شرح جميل اخى سجاد
Smile
hago كتب :
وعليكم السلام ورحمة الله
شرح جميل اخى سجاد
Smile

[COLOR="#800000"]بارك الله فيك

شكرا على التعليق الجميل[/COLOR]
الله يعطيك العافية
:d :d :d :d :d :d
Itachi كتب :[b]الله يعطيك العافية
:d :d :d :d :d :d

السلام عليكم

الله يعافيك اخي العزيز[/b]