در این مقاله، ما قصد داریم در مورد Generic List و Dictionary در #C صحبت کنیم. یک List<T>
و Dictionary
، کالکشنهای خیلی مفیدی در #C هستند و ما میخواهیم ویژگیهای آنها را در این مقاله پوشش دهیم.
این مقاله، سرفصلی از دوره آموزشی زیر میباشد:
- کلاسها و سازنده ها
- ویژگیها
- constant ،Static member ها و Extension Method ها
- Anonymous Type ها و Nullabel Type ها
- ساختارها
- شمارنده ها
- وراثت
- Interface ها
- کلاسهای Abstract
- Generic ها
- Queue, Stack, Hashtable
- Generic List و Dictionary
- Delegate ها
اگر می خواهید محتویات کامل این دوره را ببینید ، می توانید بر روی لینک سطح متوسطه #C کلیک کنید.
برای دانلود سورس، روی لینک سورس Generic List و Dictionary در #C کلیک کنید.
ما این مقاله را به قسمتهای زیر تقسیم میکنیم:
List<T>
index ارائه میدهد که هر آبجکت میتواند توسط strongly typed یک کالکشنی از آبجکتها به صورت ،List<T> یک
مورد دسترسی قرار گیرد.
:را بین دو علامت کوچکتر و بزرگتر تعیین کنیم type باید یک ،List<T> برای نمونه سازی یک
1 2 |
List<int> numberList = new List<int>(); List<Student> students = new List<Student>(); |
این نوع از List دو سازنده دیگر نیز دارد که میتوانیم از آن برای initialize کردن یک لیستی از آبجکتها استفاده کنیم. با نوع اول، میتوانیم ظرفیت لیست را تعیین کنیم:
1 |
List<int> numbers = new List<int>(2); |
با نوع دومی، میتوانیم لیستمان را با کالکشن IEnumerable پر کنیم:
1 2 |
int[] nums = new int[5] { 1, 2, 3, 4, 5 }; List<int> numbers = new List<int>(nums); |
برای دستیابی به هر عنصر، میتوانیم موقعیت index آن را مشخص کنیم:
1 |
int number = numbers[1]; |
متدها و ویژگیها
متد Add، عنصر مورد نظر را داخل یک لیست اضافه میکند:
1 2 3 4 5 6 7 8 9 |
List<int> numbers = new List<int>(); numbers.Add(34); numbers.Add(58); numbers.Add(69); foreach (int number in numbers) { Console.WriteLine(number); } |
AddRange عنصرهای یک کالکشن را به انتهای لیست اضافه میکند:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
List<int> numbers = new List<int>(); numbers.Add(34); numbers.Add(58); numbers.Add(69); int[] nums = new int[] { 1, 22, 44 }; numbers.AddRange(nums); foreach (int number in numbers) { Console.WriteLine(number); } |
Contains بررسی میکند که آیا یک عنصر در لیست مورد نظر وجود دارد یا نه:
1 2 3 4 |
if(numbers.Contains(34)) { Console.WriteLine("The number 34 exists in a list"); } |
متد IndexOf، موقعیت عنصر مورد نظر را به صورت یک عدد integer برمیگرداند. اگر آن عنصر پیدا نشود، در نتیجه متد 1- برمیگرداند:
1 2 3 4 5 |
int index; if((index = numbers.IndexOf(58)) != -1) { Console.WriteLine($"The number 58 is on the index: {index}"); } |
LastIndexOf شبیه متد IndexOf است، با این تفاوت که LastIndexOf، موقعیت عنصر مورد نظر را از آخر برمیگرداند.
متد CopyTo، کل کالکشن را در یک آرایه هم نوع از ابتدای آن کپی میکند:
1 2 3 4 5 6 7 8 |
int[] copyArray = new int[6]; numbers.CopyTo(copyArray); foreach (int copyNumber in copyArray) { Console.WriteLine(copyNumber); } |
متد Remove، اولین عنصر با موقعیت مورد نظر را از لیست حذف میکند:
1 |
numbers.Remove(69); |
متد Clear، تمام عنصرها را از لیست حذف میکند:
1 |
numbers.Clear(); |
با استفاده از ویژگی Count، میتوانیم تعداد عناصر یک لیست را بررسی کنیم:
1 |
Console.WriteLine(numbers.Count); |
Dictionary
Dictionary یک کالکشنی از کلید و مقدار ارائه میدهد. برای نمونه سازی یک آبجکت از Dictionary میتوانیم از سینتکس زیر استفاده کنیم:
1 |
Dictionary<KeyType, ValueType> Name = new Dictionary<KeyType, ValueType>(); |
KeyType یک نوع را برای کلید ما در کالکشن تعیین میکند. ValueType، مقدار تخصیص داه شده به کلید را تعیین میکند. بنابراین ما میتوانیم مقدار مورد نظر از داخل کالشکن را با استفاده از key داخل براکت باز و بسته بدست آوریم:
1 |
DictionaryName[key]; |
Dictionary چند سازنده دارد که ما برای نمونه سازی آبجکتها میتوانیم از آنها استفاده کنیم:
1 2 3 4 5 |
Dictionary<string, int> dictExample = new Dictionary<string, int>(); Dictionary<string, int> dictExample1 = new Dictionary<string, int>(5); //to set initial size Dictionary<string, int> dictExample2 = new Dictionary<string, int>(dictExample1); //accepts all the elements from created Key-Value collection |
متدها و ویژگیها
متد Add، یک جفت از کلید و مقدار را داخل کالکشن اضافه میکند:
1 2 3 4 5 6 7 8 9 10 |
Dictionary<string, int> dictExample = new Dictionary<string, int>(); dictExample.Add("First", 100); dictExample.Add("Second", 200); dictExample.Add("Third", 300); foreach (var item in dictExample) { Console.WriteLine(dictExample[item.Key]); } |
Remove یک جفت کلید و مقدار را از کالکشن بر اساس کلید حذف میکند:
1 2 3 4 5 |
dictExample.Remove("Second"); foreach (var item in dictExample) { Console.WriteLine(dictExample[item.Key]); } |
ContainsKey تعیین میکند که آیا یک کالکشن شامل کلید مورد نظر است یا خیر.
ContainsValue تعیین میکند که آیا یک کالکشن شامل مقدار مورد نظر است یا خیر:
1 2 3 4 5 6 7 8 9 |
if(dictExample.ContainsKey("First")) { Console.WriteLine("It contains key"); } if(dictExample.ContainsValue(300)) { Console.WriteLine("It contains value"); } |
متد Clear تمام جفت مقدار و کلیدها را از کالکشن حذف میکند:
1 |
dictExample.Clear(); |
اگر بخواهیم تعداد عنصرهای داخل یک کالکشن را بدست آوریم میتوانیم از ویژگی Count استفاده کنیم. اگر بخواهیم کالکشن مقادیر و یا کالکشن کلیدها را بدست آوریم میتوانیم از ویژگیهای Keys
و Values
استفاده کنیم:
1 2 3 4 5 6 7 8 9 10 11 |
Console.WriteLine(dictExample.Count); foreach (var key in dictExample.Keys) { Console.WriteLine(key); } foreach (var value in dictExample.Values) { Console.WriteLine(value); } |
نتیجه گیری
در این مقاله ما موارد زیر را یاد گرفتیم:
-
به همراه متدها آنList<T> استفاده از کالکشن
- استفاده از Dictionary به همراه متدها و ویژگیهای آن
در مقاله بعدی، در مورد Delegate ها در #C صحبت میکنیم.