اینجا میتونی برنامه نویسی ویندوز رو به طور کاملا رایگان یاد بگیری
3 سال پیش / خواندن دقیقه

کلاس Hashtable در سی شارپ

با استفاده از کلاس Hashtable میتوان مجموعه ای از مقادیر را ذخیره سازی کرد. این کالکشن مقادیر را به صورت key و value ذخیره میکند. در این فصل با کلاس Hashtable و متد های آن آشنا خواهیم شد.

Hashtable

در فضای نام System.Collections کالکشن Hashtable وجود دارد. این کالکشن مقادیر را به صورت key-value ذخیره می کند و با محاسبه کد هش مربوط به هر key ، عملیات جستجو در خود را بهینه سازی می کند.

اضافه کردن مقدار به Hashtable

از متد ()Add برای افزودن یک آیتم با مقادیر key و value به Hashtable استفاده می شود. مقادیر Key و value می‌توانند از هر نوعی باشند. Key نمی تواند null باشد ، در حالی که value می تواند مقدار null را بپذیرد :

Hashtable ht = new Hashtable();
ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
ht.Add(4, "Four");
ht.Add(5, null);
ht.Add("Fv", "Five");
ht.Add(8.5F, 8.5);

همچنین می‌توان مقدار دهی را در زمان تعریف کالکشن انجام داد :

Hashtable ht = new Hashtable()
                {
                    { 1, "One" },
                    { 2, "Two" },
                    { 3, "Three" },
                    { 4, "Four" },
                    { 5, null },
                    { "Fv", "Five" },
                    { 8.5F, 8.5 }
                };

کالکشن Hashtable می تواند کالکشن Dictionary را به خود اضافه کند :

Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "one");
dict.Add(2, "two");
dict.Add(3, "three");
Hashtable ht = new Hashtable(dict);

نکته : اگر شما در هنگام افزودن مقدار به  کالکشن Hashtable کلیدی را به مجموعه اضافه کنید که از قبل در Hashtable موجود باشد ، با خطا روبرو خواهید شد. پس بهتر است قبل از اضافه کردن مقادیر از متدهای ()Contains و ()ContainsKey استفاده کنید.

دسترسی به مقادیر موجود در Hashtable

با استفاده از مقادیر key می توان به مقادیر موجود در کالکشن Hashtable دسترسی پیدا کرد :

Hashtable ht = new Hashtable();
ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
ht.Add(4, "Four");
ht.Add("Fv", "Five");
ht.Add(8.5F, 8.5F);
    
string strValue1 = (string)ht[2];
string strValue2 = (string)ht["Fv"];
float fValue = (float) ht[8.5F];
Console.WriteLine(strValue1);
Console.WriteLine(strValue2);
Console.WriteLine(fValue);

خروجی نمونه مثال بالا به شکل زیر است :

Two Five 8.5

نکته : Hashtable یک کالکشن non-generic است ، پس می‌تواند شامل هر نوع داده ای برای key و value باشد. بنابراین مقادیر در هنگام واکشی باید به نوع موردنظر تبدیل شوند (عملیات casting).

 

عناصر Hashtable در DictionaryEntry ذخیره میشوند. به همین دلیل می توان با استفاده از حلقه foreach به شکل زیر  مقادیر آن را واکشی کرد :

Hashtable ht = new Hashtable();
ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
ht.Add(4, "Four");
ht.Add("Fv", "Five");
ht.Add(8.5F, 8.5);
foreach (DictionaryEntry item in ht)
                Console.WriteLine("key:{0}, value:{1}",item.Key, item.Value);

خروجی نمونه مثال بالا به شکل زیر است :

Key: Fv, Value: Five Key: 8.5, Value: 8.5 Key: 4, Value: Four Key: 3, Value: Three Key: 2, Value: Two Key: 1, Value: One

کالکشن Hashtable خود شامل صفات Keys و Values است که شامل تمام key ها و value های موجود در کالکشن هستند. شما میتوانید از این صفات برای واکشی آیتم ها استفاده کنید :

Hashtable ht = new Hashtable();
ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
ht.Add(4, "Four");
ht.Add("Fv", "Five");
ht.Add(8.5F, 8.5);
foreach (var key in ht.Keys )
                Console.WriteLine("Key:{0}, Value:{1}",key , ht[key]);
Console.WriteLine("***All Values***");
        
foreach (var value in ht.Values)
                Console.WriteLine("Value:{0}", value);

خروجی به شکل زیر است :

Key: Fv, Value: Five Key: 8.5, Value: 8.5 Key: 4, Value: Four Key: 3, Value: Three Key: 2, Value: Two Key: 1, Value: One ***All Values*** Value: Five Value: 8.5 Value: Four Value: Three Value: Two Value: One

حذف عناصر از Hashtable

از متد ()Remove برای حذف آیتمی با کلیدی مشخص از Hashtable استفاده می شود : 

Hashtable ht = new Hashtable();
ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
ht.Add(4, "Four");
ht.Add("Fv", "Five");
ht.Add(8.5F, 8.5);
ht.Remove("Fv"); // removes {"Fv", "Five"}

بررسی وجود مقادیر در Hashtable

از متدهای ()Contains و ()ContainsKey برای بررسی وجود آیتمی مشخص در کالکشن Hashtable استفاده می شود :

Hashtable ht = new Hashtable();
ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
ht.Add(4, "Four");
ht.Contains(2);// returns true
ht.ContainsKey(2);// returns true
ht.Contains(5); //returns false
ht.ContainsValue("One"); // returns true

متد ()Clear

از متد ()Clear برای حذف همه مقادیر از Hashtable استفاده میشود :

Hashtable ht = new Hashtable();
ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
ht.Add(4, "Four");
ht.Add("Fv", "Five");
ht.Add(8.5F, 8.5);
ht.Clear(); // removes all elements
Console.WriteLine("Total Elements: {0}", ht.Count);

خروجی نمونه مثال بالا به شکل زیر است :

Total Elements: 0

 



شاید از نوشته‌های زیر خوشتان بیاید
نظر خود را درباره این پست بنویسید ...

منوی سریع