تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
Dealing with Hashtable in CSharp
#1
[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()); 

ولا تنسونا و والدي في دعواتكم و وفقنا الله واياكم لما فيه الصلاح والارشاد
الرد }}}}
تم الشكر بواسطة:
#2
السلام عليكم

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

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

الرد }}}}
تم الشكر بواسطة:
#3
[COLOR="#800000"]
abulayth كتب :السلام عليكم

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

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

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

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

[/COLOR]
الرد }}}}
تم الشكر بواسطة:
#4
وعليكم السلام ورحمة الله
شرح جميل اخى سجاد
Smile
سبحان الله وبحمده سبحان الله العظيم
آللهم لگ آلحمد حتى ترضى .. ولگ آلحمد إذا رضيِت .. ولگ آلحمد بعد آلرضآ
الرد }}}}
تم الشكر بواسطة:
#5
hago كتب :
وعليكم السلام ورحمة الله
شرح جميل اخى سجاد
Smile

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

شكرا على التعليق الجميل[/COLOR]
الرد }}}}
تم الشكر بواسطة:
#6
الله يعطيك العافية
:d :d :d :d :d :d
الرد }}}}
تم الشكر بواسطة:
#7
Itachi كتب :[b]الله يعطيك العافية
:d :d :d :d :d :d

السلام عليكم

الله يعافيك اخي العزيز[/b]
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  HashTable in C#.NET Sajad 4 2,221 04-10-13, 10:01 PM
آخر رد: Sajad

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم