Масиви в Сі-шарп. Клас Список
Масив - це набір однотипних даних, які містяться у пам'яті послідовно один за одним. Доступ до елементів масиву здійснюється за індексом (номером) елемента. Масив може містити елементи будь-якого типу даних, можна навіть створювати масив масивів (ступінчастий масив). Кількість елементів у масиві називається розміром масиву. Масиви відносяться до посилальних типів даних.
Масиви в Сі-шарп можуть бути одновимірними і багатовимірними.
Одномірні масиви
Одновимірний масив по-іншому ще називається вектором, і для доступу до його елементів використовується тільки один індекс. Виглядає вектор приблизно так:
У Сі-шарп оголошення масиву має таку структуру:
тип[] ім’я_масиву = new тип[розмір масиву];
Приклад:
int[] array = new int[5]; // створюємо масив цілих чисел
string[] seasons = new string[4] {"зима","весна","літо","осінь"}; //оголошення масиву рядків і його ініціалізація значеннями// Оголошення масиву рядків і його ініціалізація значеннями
Якщо відбувається ініціалізація, оператор new можна опускати:
String [] сезони = {"зима", "весна", "літо", "осінь"}; // Коректно
Доступ до елементів здійснюється за індексом. Слід пам'ятати, що індексація починається з нуля - перший елемент масиву має індекс 0, а останній N-1, де N - розмір масиву.
static void Main(string[] args)
{
int[] numbers = new int[5];
numbers[0] = 5;
numbers[1] = 2;
numbers[4] = 3;
numbers[5] = 2; // помилка, індекс поза рамками масиву
}
В якості масиву можна уявити, наприклад, список студентів у групі (імена), показники температури повітря за останні кілька днів і так далі.
Багатовимірні масиви
Одним з випадків багатовимірного масиву служить двовимірний масив (матриця). У матриці для доступу до елементів необхідно використовувати два індекси.
Кількістю індексів, які використовуються для доступу до елементів масиву називається розмірність масиву.
int[,] numbers1 = new int[2, 2]; // оголошення двовимірного масиву
int[,,] numbers2 = new int[2, 2 ,3]; // оголошення трьохвимірного масиву
int[,] numbers3 = new int[3, 2] { {6, 0}, {5, 7}, {8, 9} }; // ініціалізація двовимірного масиву
Елементу масиву numbers1 з координатами 1,1 присвоїмо значення 8:
numbers1 [1, 1] = 8;
Багатовимірні масиви використовуються набагато рідше одновимірних.
Наведу трохи «бердовий» приклад даних, які можна було б представити як двовимірний масив:
Є матриця 7 * 4. Рядки, яких сім, будуть відповідати днях тижня, а 4 стовпці - часу дня (00:00, 6:00, 12:00, 18:00). В якості даних буде температура повітря.
Значення температури з координатами 2,3 буде відповідати температурі в середу в 18:00. На практиці, звичайно, такі дані представлялися б в іншому вигляді, але для прикладу підійде.
Ступінчасті (зубчасті) масиви в Сі-шарп
Ступінчастий (зубчасті) масив - це масив масивів. У ньому довжина кожного масиву може бути різною. Приблизно це виглядає так:
Приклад оголошення ступеневого масиву:
static void Main(string[] args)
{
int[][] array = new int[3][]; // оголошуємо масив, який містить 3 масиви
array [0] = new int[3]; //створення внутрішнього масиву
array [1] = new int[2];
array [2] = new int[5];
}
Доступ до елементів здійснюється за тим же принципом, як і з багатовимірними масивам, тільки тут вже беруть участь дві пари квадратних дужок (продовження прикладу вище):
array [0][1] = 5;
array [1][1] = 8;
array [1][2] = 5; // помилка, індекс «2» за межею масиву
Властивість Length
Всі масиви є об'єктами і у них є деякі властивості.Найкориснішим для нас буде властивість Length, яке повертає кількість елементів в масиві (у всіх розмірностях)
static void Main(string[] args)
{
int[] numbers = new int[5];
int size = numbers.Length; // size = 5
}
Клас Список
Клас Список служить для роботи зі списками, про що і говорить його назва. Це такий «наворочений» масив. Головна відмінність від простого масиву в тому, що він динамічний - ви можете вставляти і видаляти елементи в будь-який час, в той час як в простому масиві розмір вказується при створенні і зробити його більше або менше не можна.
static void Main(string[] args)
{
List<string> teams = new List<string>(); // створення списку
teams.Add("Barcelona"); // додавання елемента
teams.Add("Chelsea");
teams.Add("Arsenal");
List<string> teams2 = new List<string>() {"Dynamo", "CSKA" }; // ініціалізація
}
Додавання елементів
Метод |
Опис |
Add([елемент]) |
додає елемент в кінець списку |
AddRange([список елементів]) |
додає в кінець списку елементи зазначеного списку |
Insert([індекс],[елемент]) |
вставляє елемент на позицію відповідну індексом, всі елементи «правіше» будуть зрушені на одну позицію |
InsertRange([індекс], [список елементів]) |
те ж саме, тільки вставляється безліч елементів |
Видалення елементів
Метод |
Опиc |
Remove([елемент]) |
видаляє перше входження зазначеного елемента зі списку |
RemoveRange(індекс], [кількість]) |
видаляє вказану кількість елементів, починаючи з вказаною позиції |
RemoveAt([індекс]) |
видаляє елемент, який знаходиться на вказаній позиції |
Clear() |
видаляє всі елементи списку |
Властивість Count відповідає властивості звичайного масиву - довжина - кількість елементів.
static void Main(string[] args)
{
List<string> teams = new List<string>() { "Inter", "Milan", "Bayern", "Juventus"};
teams.Insert(2,"Barcelona"); // вставляємо в список елемент "Barcelona" на позицію 2
teams.Remove("Milan"); // вилучаємо перше входження елемента "Milan" із списку
List<string> newTeams = new List<string>() { "Liverpool", "Roma", "Borussia", "Valencia" };
teams.AddRange(newTeams); // додаємо в кінець списку елементи списку newTeams
}
Варто пам'ятати, що прості масиви працюють швидше, ніж списки списку. Якщо у вашій програмі не особливо важлива продуктивність і ви не працюєте з великими кількостями даних, то зручніше використовувати список, в іншому випадку потрібно використовувати прості масиви.
Домашнє завдання
Працювати з масивами без використання циклів в більшості випадків немає сенсу. Про циклах ми поговоримо в наступному уроці. А так, поки можете створити різні типи масивів, записати щось, вивести на екран деякі елементи масиву, спробуйте отримати доступ до елемента поза рамками масиву. Створіть список, спробуйте додати елемент в кінець списку, вставити елемент за індексом і так далі.
PS. Буду дуже вдячний, якщо ви поділитись з друзями цією статею за допомогою кнопок соціальних мереж в кінці поста.