با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، با دوره کامل آموزش #C در خدمت شما دوستان هستیم . در بخش قبل به معرفی نوعی از مجموعه های غیر عمومی به نام صف (Queue) در زبان #C پرداختیم ، در این بخش قصد داریم شما را با مجموعه های Hashtable در #C آشنا کنیم.
#C شامل مجموعه Hashtable در فضای نام System.Collections است، که شبیه به مجموعه عمومی دیکشنری است. مجموعه Hashtable عناصر را به صورت جفت های مقدار و کلید ذخیره می کند. کد به صورت هش و بهینه سازی شده ذخیره می شود. این نوع مجموعه جستجوها را با محاسبه کد هش شده هر کلیدانجام میدهد.
توضیحات | پراپرتی |
تعداد کل عناصر (کلید / مقدار) در Hashtable را برمی گرداند. | Count |
مقدار بولین را بر میگرداند که نشان می دهد آیا Hashtable فقط خواندنی است یا خیر. | IsReadOnly |
مقدار مربوط به عنصر مشخص شده را برمی گرداند و یا آن را دریافت می کند. | Item |
مجموعه ای از کلید های موجود در Hashtable را برمیگرداند. | Keys |
مجموعه ای از مقادیر موجود در Hashtable را برمیگرداند. | Values |
توضیحات | متد |
یک آیتم با یک کلید و مقدار را به Hashtable اضافه می کند. | Add |
آیتم را با کلید مشخص شده از Hashtable حذف می کند. | Remove |
تمام عناصر موجود در Hashtable را حذف می کند. | Clear |
چک میکند که آیا کلید مورد نظر در Hashtable موجود است یا خیر. | Contains |
چک میکند که آیا کلید مورد نظر در Hashtable موجود است یا خیر. | ContainsKey |
چک میکند که آیا مقدار مورد نظر در Hashtable موجود است یا خیر. | ContainsValue |
کد هش را برای کلید مشخص شده بازمی گرداند. | GetHash |
متد Add یک مورد با کلید و مقدار را به Hashtable اضافه می کند. کلید و مقدار می تواند از هر نوع داده باشند. کلید نمی تواند Null باشد در حالی که مقدار می تواند Null باشد.
ساختار کلی :
void Add(object key, object value)
1 2 3 4 5 6 7 8 9 | 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); |
همچنین می توانید کلید و مقدار را در هنگام مقداردهی اولیه تعیین کنید:
1 2 3 4 5 6 7 8 9 10 | Hashtable ht = new Hashtable() { { 1, "One" }, { 2, "Two" }, { 3, "Three" }, { 4, "Four" }, { 5, null }, { "Fv", "Five" }, { 8.5F, 8.5 } }; |
Hashtable می تواند تمام عناصر دیکشنری را داشته باشد ، مانند مثال زیر :
1 2 3 4 5 6 7 | 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 وجود دارد دوباره اضافه کنید متد Add یک استثناء را برمی گرداند. بنابراین همیشه قبل از اضافه کردن عنصر به Hashtable، کلید مورد نظر را با استفاده از متد Contains یا ContainsKey بررسی کنید.
می توانید به مقدار یک کلید موجود در Hashtable با استفاده از شماره اندیس و یا کلید آن دسترسی داشته باشید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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); |
خروجی :
1 2 3 | Two Five 8.5 |
Hashtable یک مجموعه غیر عمومی است و میتواند یک کلید و یک مقدار از هر نوع داده داشته باشد. ولی مقادیر باید از نوع داده مناسب استفاده شوند در غیر این صورت کامپایلر خطا برمی گرداند .
برای دسترسی به عناصر Hashtable در حلقه ها باید از نوع داده DictionaryEntry استفاده کنید. بنابراین هر عنصر در Hashtable را به DictionaryEntry منتقل می کنید. همانطور که در زیر نشان داده شده است ،از دستور foreach برای تکرار Hashtable استفاده میکنیم:
1 2 3 4 5 6 7 8 9 10 11 | 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); |
خروجی :
1 2 3 4 5 6 | 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 است که توسط آنها می توانید کلیه کلیدها و مقادیر را به ترتیب دریافت کنید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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); |
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |
توسط این متد میتوانید عنصری را براساس کلید آن حذف کنید.
ساختار کلی :
void Remove(object key)
1 2 3 4 5 6 7 8 9 | 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"} |
متد های Contains و ContainsKey بررسی میکنند که آیا کلید مشخص شده در مجموعه Hashtable وجود دارد یا خیر. همچنین ContainsValue بررسی می کند که آیا مقدار مشخص شده در Hashtable وجود دارد یا خیر.
ساختار کلی :
1 2 3 | bool Contains(object key) bool ContainsKey(object key) bool ContainsValue(object value) |
1 2 3 4 5 6 7 8 9 10 | 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 تمام عناصر بهمراه کلید و مقدارشان را از Hashtable حذف می کند.
ساختار کلی :
void Clear()
1 2 3 4 5 6 7 8 9 10 | 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); |
خروجی :
1 | Total Elements: 0 |
در این قسمت از آموزش با مجموعه Hashtable در زبان #C آشنا شدید ، در بخش بعدی قصد داریم شما را با Indexer ها در زبان #C آشنا کنیم.