Въведение в C# За масивите, низовете и работата с тях, Блог на добрия програмист
Не толкова отдавна обсъждахме основните типове данни в езика за програмиране C#. Описаните типове са доста стандартни и присъстват в почти всички езици за програмиране. Въпреки това, в допълнение към обичайната концепция за "тип данни", съществува концепцията за "масив от определен тип данни " - именно за тях ще говорим в тази глава. И така, какво е масив? Ако искаме да кажем дефиницията на масив с прости думи, тогава вероятно трябва да се спрем на следната дефиниция.Масив е набор от променливи от един и същи тип и този набор има краен брой елементи. Може веднага да имате въпрос - как този набор от променливи се различава от набора от променливи, които могат да бъдат създадени, както следва:
Отговорът на този въпрос е много прост. И най-важното е, че отговорът на този въпрос ще бъде основният ясен пример защо масивите са удобни и защо изобщо са измислени. Представете си, че сте изправени пред следната задача: „Имате 5 кутии, в които слагат пари. Трябва да напишете програма, която ще поиска от потребителя да въведе число - сумата на натрупаните пари във всяка банка. Как може да се реши този проблем без масиви? Като цяло решението е доста просто:
Всичко е просто. Но не мислите ли, че е твърде тромаво? Лично на мен ми се струва ... Освен това си представете, че нямате 5 кутии, а 100 или 1000 или 10 000? Колко време ще ви отнеме да повторите този код за толкова много входове? Страх ме е дори да си го представя. Тук идват на помощ масивите. Както споменах по-горе, масивът е набор от данни от един и същи тип. Общият синтаксис за създаване на масив в C# е както следва:
По този начин, ако искаме да създадем масив m от типint, който ще има 10 елемента, тогава ще напишем:
Сега нека се върнем към нашите банки и да решим проблема с помощта на масив:
Поне решението не беше толкова непохватно. Заслужава да се отбележи, че имаме динамика. Като цяло за нас няма значение колко кутии имаме, броят редове код няма да промени това. Единственото нещо, което трябва да променим, е стойността на променливата bottleCount и сега имаме не 5, а 10 000 кутии.
Какво трябва да знаете за масивите в C#? Най-важното нещо, което трябва да запомните и никога да не забравяте е:
- Масивът е клас
- Тъй като това е клас, той се предава по референция (какво представлява може да се види в бележката как един клас се различава от структура в C#)
- Квадратните скоби [] се използват за достъп до конкретна позиция на масива.
- Номерирането на елементите на масива започва от нула

Забележка: Ако ви е трудно да работите с масиви, тогава за по-голяма яснота, носете лист хартия с химикал пред себе си. Представете си масива като набор от блокове, които следват един след друг.
Сега нека си представим, че все пак сме яростни противници на масивите. И като част от нашата задача, ние все още сме готови да създадем 1000 индивидуални променливи. Изведнъж обаче нашата задача се променя малко. Сега банки ни носят всеки ден от фабриката. Броят им обаче може да варира. Как можете да разрешите този проблем, като сте противник на масивите? Без отговор. Нямаме способността да създаваме динамичен брой променливи. Но тук можем да създадем масив с динамична дължина. Просто трябва леко да променим първия ред на нашето решение:
Примерът, описан по-горе, е много важен. Код от този вид често се среща в реални проблеми. Именно той ви позволява да направите приложението си гъвкаво и гъвкаво, както и да организиратесъхраняване на големи количества данни.
Сега да преминем към втората част от нашата тема -ред. Всъщност тук всичко е много просто. Нека помислим логично. Какво е низ? Низът е набор от знаци. В едно определение виждаме две познати думи "характер" и "набор". Символът е тип данни (char), а наборът е масив. Таканиз по същество е масив от тип char. Това означава, че можем да работим с него като с масив и да имаме достъп до определени символи, например:
Не забравяйте обаче, че масивът е клас. И ако говорим за класstring, тогава говорим за много мощен клас, в който са реализирани огромен брой операции. В допълнение към това, класът низ има едно много важно ограничение - не можем да заменим самостоятелен знак в низ (въпреки че можете да промените самостоятелен елемент от масив):
Голям брой вградени функции и напълно различна логика за това как работят низовете в C# създават пълното впечатление, че типът низ изобщо не е масив, а нещо отделно. Може би това е така, но здравият разум и обичайното пренасяне на концепцията за низове в реалния живот все още предполагат, че низовете са набор от символи и съответно масив от тип char.