با استفاده از کلاس 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