Урок за C# колекции с примери
⚡ Умно обобщение
Колекциите в C# предоставят гъвкав начин за съхраняване и управление на групи от обекти. За разлика от масивите, колекциите нарастват и се свиват по време на изпълнение, а пространствата от имена System.Collections и System.Collections.Generic предоставят готови типове за списъци, речници, стекове и опашки.

В предишния ни урок научихме как можем да използваме масиви в C#. Нека направим бърз преглед на това, масивите в програмирането се използват за групиране на набор от свързани обекти. Така че може да се създаде масив или набор от цели числа, до които може да се стигне чрез едно име на променлива.
Какво е колекции в C#?
Колекциите са подобни на Масивите, той предоставя по-гъвкав начин за работа с група от обекти.
При масивите бихте забелязали, че трябва предварително да определите броя на елементите в масива. Това трябваше да се направи при декларирането на масива.
Но в колекция не е необходимо да определяте размера на колекцията предварително. Можете да добавяте елементи или дори да премахвате елементи от колекцията по всяко време. Тази глава ще се фокусира върху това как можем да работим с различните колекции, налични в C#.
System.Collections Класове
.NET Framework групира оригиналните негенерични класове колекции в пространството от имена System.Collections. Таблицата по-долу обобщава основните типове, които можете да използвате веднага.
| колекция | Descriptйон |
| ArrayList | Колекцията ArrayList е подобна на Arrays тип данни в C#. Най-голямата разлика е динамичната природа на колекцията от списъци с масиви. |
| Стек | Стекът е специална колекция от случаи, която представлява концепцията „последен влязъл, първи излязъл“ (LIFO). |
| Опашките | Опашката е специална колекция от случаи, която представлява концепцията „първи влязъл, първи излязъл“. |
| Хеш таблица | Хеш таблицата е специална колекция, която се използва за съхраняване на елементи от тип „ключ-стойност“. |
| Сортиран списък | SortedList е колекция, която съхранява двойки ключ-стойност във възходящ ред на ключ по подразбиране. |
| BitArray | Масивът от битове е масив от структура от данни, който съхранява битове. |
Общи колекции в C#
Негенеричните класове по-горе съхраняват всеки елемент като общ обект, което означава, че компилаторът не може да провери типа и програмата плаща малка цена за опаковане на стойности. За да реши това, C# добави пространството от имена System.Collections.Generic, където всяка колекция е обвързана с един деклариран тип.
Обща колекция, като например List приема само низове, така че грешките се улавят по време на компилация и не е необходимо преобразуване (casting), когато четете елемент обратно. Това прави генеричните колекции по-безопасни, по-бързи и по-лесни за четене, поради което те са изборът по подразбиране в съвременния C# код.
Най-често срещаните генерични колекции са изброени по-долу:
- Списък : Променяем по размер, базиран на индекси списък, обобщен заместител на ArrayList.
- Речник : Съхранява двойки ключ-стойност с бързи, базирани на хеш търсения.
- Хеш набор : Съдържа само уникални стойности и поддържа операции с множества, като например обединение.
- Опашка : Колекция „първи влязъл, първи излязъл“, генеричната версия на Queue.
- Стек : Колекция „последен влязъл, първи излязъл“, генеричната версия на Stack.
- СортиранСписък : Поддържа двойките ключ-стойност, сортирани по ключ във възходящ ред.
Пример за колекция от списъци в C#
Списъкът е най-широко използваната генерична колекция, защото се държи като динамичен масив. Примерът по-долу създава списък с низове, добавя и премахва елементи, чете размера му и след това отпечатва останалите стойности. Целият код е написан във файла Program.cs.
Стъпка 1) Импортирайте пространството от имена System.Collections.Generic и декларирайте списък с низове.
Стъпка 2) Добавете елементи с метода Add и изтрийте един с метода Remove.
Стъпка 3) Прочетете свойството Count, след което прегледайте списъка с оператор foreach.
using System; using System.Collections.Generic; namespace DemoApplication { class Program { static void Main(string[] args) { List<string> tutorials = new List<string>(); tutorials.Add("Java"); tutorials.Add("Python"); tutorials.Add("Kotlin"); tutorials.Remove("Python"); Console.WriteLine(tutorials.Count); foreach (string tutorial in tutorials) { Console.WriteLine(tutorial); } Console.ReadKey(); } } }
Code Обяснение:
- Именуването System.Collections.Generic се импортира, така че типът List е достъпен за програмата.
- Нов списък наречен tutorials се създава и три имена се добавят с метода Add.
- Методът „Remove“ изтрива стойността „Python”, което оставя два елемента в списъка.
- Свойството Count връща броя на елементите, а цикълът foreach отпечатва всяка оставаща стойност по ред.
Когато програмата се изпълни, тя първо отпечатва броя на 2, следван от Java намлява Kotlin на отделни редове. Това показва как една колекция променя размера си по време на изпълнение, нещо, което фиксиран масив не може да направи.
Разлика между масиви и колекции в C#
И двете ан масив и колекция, групираща свързани елементи под едно име, но те се държат различно, след като програмата се изпълни. Да знаеш кога да използваш всеки от тях ти помага да напишеш по-чист и по-ефективен код.
Основните разлики са изброени по-долу:
- Размер: Масивът има фиксирана дължина, зададена при декларацията, докато колекцията може да расте или да се свива по всяко време.
- Обработка на типове: Масивът съхранява един тип, докато колекцията може да бъде типово безопасна с генерични видове или да съдържа обекти от смесени типове, когато не са генерични.
- Местоположение: Масивите са вградени в езика, докато класовете колекции се намират в пространствата от имена System.Collections и System.Collections.Generic.
- Вградени операции: Колекциите предлагат готови методи за добавяне, премахване, търсене и сортиране на елементи, докато масивите предоставят само основен индексиран достъп.
- Най-добро използване: Изберете масив, когато броят на елементите е известен и фиксиран, и колекция, когато броят се променя по време на изпълнение на програмата.
Накратко, масивите са най-подходящи за данни с фиксиран размер, докато колекциите предоставят гъвкавостта, от която се нуждаят повечето реални приложения.
