Какво е масив
Масивът е поредица от стойности от един и същ тип, подредени в паметта една след друга. Достъпваш ги по индекс — пореден номер, започващ от 0.
Ключово
В C# индексите започват от 0, а не от 1! Това е най-честата грешка в началото.
Деклариране и инициализация
// Празен масив с определен размер (всички стойности = 0)
int[] numbers = new int[5];
// Със стойности веднага
int[] grades = { 6, 5, 4, 6, 3 };
int[] grades2 = new int[] { 6, 5, 4, 6, 3 };
// Друг тип
string[] names = { "Иван", "Мария", "Петър" };
double[] prices = new double[10];Достъп и промяна:
int first = grades[0]; // 6
int last = grades[4]; // 3
grades[2] = 5; // променяме третия елемент
int count = grades.Length; // 5 (винаги взимай дължината така)IndexOutOfRangeException
Ако опиташ grades[5] на горния масив — ще получиш грешка по време на изпълнение. Валидните индекси са 0 .. Length - 1.
Обхождане на масив
С for (когато ти трябва индексът)
int[] grades = { 6, 5, 4, 6, 3 };
for (int i = 0; i < grades.Length; i++)
{
Console.WriteLine($"Оценка #{i + 1}: {grades[i]}");
}С foreach (когато ти трябват само стойностите)
foreach (int grade in grades)
{
Console.WriteLine(grade);
}foreach е по-кратък и по-четим, но не можеш да променяш елементите чрез него.
Типични задачи
Сума и средно аритметично
int[] grades = { 6, 5, 4, 6, 3 };
int sum = 0;
foreach (int g in grades)
sum += g;
double avg = (double)sum / grades.Length;
Console.WriteLine($"Сума: {sum}, средно: {avg:F2}");Намиране на максимум
int[] numbers = { 3, 7, 1, 9, 4, 2 };
int max = numbers[0];
for (int i = 1; i < numbers.Length; i++)
{
if (numbers[i] > max) max = numbers[i];
}
Console.WriteLine($"Максимум: {max}");Съвет
Започваме max от numbers[0], не от 0! Иначе няма да работи за масиви само с отрицателни числа.
Търсене (linear search)
int[] arr = { 5, 12, 7, 21, 3 };
int target = 7;
int foundAt = -1;
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] == target)
{
foundAt = i;
break;
}
}
Console.WriteLine(foundAt == -1 ? "Не намерих" : $"На индекс {foundAt}");Обръщане на масив
int[] arr = { 1, 2, 3, 4, 5 };
for (int i = 0; i < arr.Length / 2; i++)
{
int temp = arr[i];
arr[i] = arr[arr.Length - 1 - i];
arr[arr.Length - 1 - i] = temp;
}
// или най-простото:
Array.Reverse(arr);Двумерни масиви — таблици
За работа с матрици, шахматни дъски, таблици с оценки и т.н.:
int[,] matrix = new int[3, 4]; // 3 реда, 4 колони
// Със стойности
int[,] grid = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};
int value = grid[1, 2]; // 7 — ред 1, колона 2
int rows = grid.GetLength(0); // 3
int cols = grid.GetLength(1); // 4Обхождане с вложени цикли:
for (int r = 0; r < grid.GetLength(0); r++)
{
for (int c = 0; c < grid.GetLength(1); c++)
{
Console.Write($"{grid[r, c],4}");
}
Console.WriteLine();
}Какво трябва да запомниш
- Масив = поредица от стойности с фиксиран размер и един тип.
- Индекси започват от 0, валидни са
[0 .. Length - 1]. forкогато ти трябва индексът,foreachза просто обхождане.- За намиране на min/max — започвай от първия елемент, не от 0.
- Двумерни масиви:
int[,], достъп сgrid[r, c].