در این مقاله، ما میخواهیم در مورد کالکشنهای Stack،Queue و Hashtable در #C، نحوه استفاده از آنها و متدهایی که ارائه میدهند صحبت کنیم.
این مقاله، سرفصلی از دوره آموزشی زیر میباشد:
- کلاسها و سازنده ها
- ویژگیها
- constant ،Static member ها و Extension Method ها
- Anonymous Type ها و Nullabel Type ها
- ساختارها
- شمارنده ها
- وراثت
- Interface ها
- کلاسهای Abstract
- Generic ها
- Queue, Stack, Hashtable
- Generic List و Dictionary
- Delegate ها
اگر می خواهید محتویات کامل این دوره را ببینید ، می توانید بر روی لینک سطح متوسطه #C کلیک کنید.
برای دانلود سورس مثالها، روی لینک Collection ها در #C کلیک کنید.
خب شروع کنیم.
ما این مقاله را به قسمتهای زیر تقسیم میکنیم:
- کالکشن Queue
- رایجترین متدها و ویژگیها
- کالکشن Stack
- متدها و ویژگیهای مرتبط
- Hashtable
- متدهای رایج در کالکشن Hashtable
- ویژگیهای رایج در کالکشن Hashtable
کالکشن Queue
کالکشن queue ارائه دهنده کالکشنی از آبجکتها به صورت first-in ، first-out است. این بدان معناست که ما میتوانیم آبجکتهایمان را با یک ترتیب معین در یک کالکشن queue قرار دهیم و با همان ترتیب نیز حذف کنیم. پس اولین آبجکتی که وارد صف (queue) میشود اولین آبجکتی است که از صف خارج میشود.
برای ایجاد یک نمونه آبجکت از یک کالکشن queue می توان از دو دستور مختلف استفاده کرد.
با استفاده از فضای نام System.Collection.Generic:
1 |
Queue<int> intCollection = new Queue<int>(); |
با استفاده از فضای نام System.Collection:
1 |
Queue queueCollection = new Queue(); |
اگر ما یک آبجکت را با ارائه یک type (در مثال ما یک int) تعریف کنیم، میتوانیم فقط اعداد integer داخل آن ذخیره کنیم. از طرف دیگر، اگر از مثال دوم استفاده کنیم، چون در این حالت، آن آبجکتها را ذخیره میکند پس میتوانیم نوعهای داده ای مختلف را در کالکشن ذخیره کنیم.
رایجترین متدها و ویژگیها
متد Enqueue، یک عنصر را درون یک کالکشن اضافه میکند:
1 2 3 4 5 6 7 8 9 |
Queue queueCollection = new Queue(); queueCollection.Enqueue(54); queueCollection.Enqueue("John"); queueCollection.Enqueue(54.10); foreach (var item in queueCollection) { Console.WriteLine(item); } |
زمانی که میخواهیم یک عنصر را که در ابتدای کالکشن وارد شده است را حذف کنیم و آن را به عنوان خروجی برگردانیم، از متد Dequeue استفاده میکنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Queue queueCollection1 = new Queue(); queueCollection1.Enqueue(54); queueCollection1.Enqueue("John"); queueCollection1.Enqueue(54.10); int number = Convert.ToInt32(queueCollection1.Dequeue()); Console.WriteLine($"Removed element is: {number}"); Console.WriteLine(); foreach (var item in queueCollection1) { Console.WriteLine(item); } |
متد Peek، یک عنصر را که در ابتدای کالکشن وارد شده است را برمیگرداند اما آن را حذف نمیکند:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Queue queueCollection2 = new Queue(); queueCollection2.Enqueue(54); queueCollection2.Enqueue("John"); queueCollection2.Enqueue(54.10); int peekNumber = Convert.ToInt32(queueCollection2.Peek()); Console.WriteLine($"Returned element is: {number}"); Console.WriteLine(); foreach (var item in queueCollection2) { Console.WriteLine(item); } |
متد Clear، تمام عنصرهای موجود در کالکشن را حذف میکند.
اگر بخواهیم بررسی کنیم که چه تعداد عنصر در داخل کالکشن داریم، میتوانیم از ویژگی Count استفاده کنیم:
1 2 |
queueCollection2.Clear(); Console.WriteLine(queueCollection2.Count); |
کالکشن Stack
کالکشن stack، ارائه دهنده یک کالشکن به صورت last-in ،first-out است. به این معنی که، یک عنصری که اول وارد کالکشن میشود آخر از همه خارج میشود.
همانند کالکشن Queue، میتوانیم از فضای نام های System.Collection
و System.Collection.Generic
برای این کالکشن نیز استفاده کنیم:
1 2 |
Stack stack = new Stack(); Stack<int> stackInt = new Stack<int>(); |
متدها و ویژگیهای مرتبط
متد Push، یک آبجکت را در انتهای کالکشن درج میکند:
1 2 3 4 5 6 7 8 9 |
Stack stack1 = new Stack(); stack1.Push(328); stack1.Push("Fifty Five"); stack1.Push(124.87); foreach (var item in stackCollection1) { Console.WriteLine(item); } |
متد Pop، عنصری که آخر از همه وارد کالکشن شده است را حذف کرده و آن را به عنوان خروجی برمیگرداند:
1 2 3 4 5 6 7 8 9 10 11 12 |
Stack stackCollection2 = new Stack(); stackCollection2.Push(328); stackCollection2.Push("Fifty Five"); stackCollection2.Push(124.87); double number = Convert.ToDouble(stackCollection2.Pop()); Console.WriteLine($"Element removed from a collection is: {number}"); foreach (var item in stackCollection2) { Console.WriteLine(item); } |
متد Peek، آبجکتی که آماده به خروج از کالکشن است را به عنوان خروجی برمیگرداند، اما آن را حذف نمیکند:
1 2 3 4 5 6 7 8 9 10 11 12 |
Stack stackCollection3 = new Stack(); stackCollection3.Push(328); stackCollection3.Push("Fifty Five"); stackCollection3.Push(124.87); double number1 = Convert.ToDouble(stackCollection3.Peek()); Console.WriteLine($"Element returned from a collection is: {number}"); foreach (var item in stackCollection3) { Console.WriteLine(item); } |
برای حذف تمام آبجکتها از یک کالکشن، از متد Clear استفاده میکنیم.
اگر تعداد عناصر را بخواهیم، از ویژگی Count استفاده میکنیم:
1 2 |
stackCollection3.Clear(); Console.WriteLine(stackCollection3.Count); |
Hashtable
Hashtable ارائه دهنده یک کالکشن به صورت جفت مقدار و کلید میباشد که بر اساس یک کد hash شده از کلید سازماندهی شده است. برخلاف کالکشنهای queue و stack، ما فقط میتوانیم از فضای نام System.Collections برای نمونه سازی یک آبجکت hashtable استفاده کنیم:
1 |
Hashtable hashTable = new Hashtable(); |
یک سازنده Hashtable، دارای 15 سازنده overload است.
متدهای رایج در کالکشن Hashtable
متد Add، یک عنصر را با کلید تعیین شده به همراه مقدار مورد نظر در کالکشن اضافه میکند:
1 2 3 4 5 6 7 8 |
Hashtable hashTable = new Hashtable(); hashTable.Add(Element.First, 174); hashTable.Add(Element.Second, "Sixty"); hashTable.Add(Element.Third, 124.24); foreach (var key in hashTable.Keys) { Console.WriteLine($"Key: {key}, value: {hashTable[key]}"); } |
متد Remove، عنصر را با کلید تعیین شده از یک کالکشن حذف میکند:
1 2 3 4 5 6 7 8 9 10 11 |
Hashtable hashTable1 = new Hashtable(); hashTable1.Add(Element.First, 174); hashTable1.Add(Element.Second, "Sixty"); hashTable1.Add(Element.Third, 124.24); hashTable1.Remove(Element.Second); foreach (var key in hashTable1.Keys) { Console.WriteLine($"Key: {key}, value: {hashTable[key]}"); } |
ContainsKey بررسی میکد که آیا یک کالکشن، شامل کلید مورد نظر است یا خیر:
1 2 3 4 |
if (hashTable.ContainsKey(Element.Second)) { Console.WriteLine($"Collection contains key: {Element.Second} and its value is {hashTable[Element.Second]}"); } |
ContainsValue بررسی میکد که آیا یک کالکشن، شامل مقدار مورد نظر است یا خیر.
Clear تمام عنصرها را از یک کالکشن حذف میکند:
1 |
hashTable.Clear(); |
ویژگیهای رایج در کالکشن Hashtable
ویژگی Count، تعداد عنصرهای موجود در یک کالکشن را برمیگرداند:
1 |
Console.WriteLine(hashTable.Count); |
ویژگی Keys، تمام کلیدهای یک کالکشن و ویژگی Value
s، تمام مقدارهای یک کالکشن را برمیگرداند:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Hashtable hashTable2 = new Hashtable(); hashTable2.Add(Element.First, 174); hashTable2.Add(Element.Second, "Sixty"); hashTable2.Add(Element.Third, 124.24); var keys = hashTable2.Keys; foreach (var key in keys) { Console.WriteLine(key); } Console.WriteLine(); var values = hashTable2.Values; foreach (var value in values) { Console.WriteLine(value); } |
نتیجه گیری
در این مقاله، ما یاد گرفتیم که:
- کالکشن Queue را به همراه متدهای آن استفاده کنیم.
- کالکشن Stack را به همراه متدهای آن استفاده کنیم.
- کالکشن Hashtable را به مراه متدهای آن استفاده کنیم.
در مقاله بعدی، ما در مورد List و Dictionary در #C صحبت میکنیم.