🔷 C#

Массивы (списки) в C# (.NET 6): подробное руководство

Массивы (списки) в C#

Что такое массив и зачем он нужен?

Представь, что ты собираешь коллекцию марок. Если марок всего две, ты можешь просто держать их в руках. Но если их сто, лучше сложить их в специальный альбом с ячейками. В программировании таким «альбомом» для хранения множества однотипных данных служит массив (или список). Массив позволяет хранить много значений под одним именем и обращаться к каждому из них по номеру (индексу).

Например, тебе нужно записать температуру за неделю. Вместо того чтобы создавать семь отдельных переменных (temp1, temp2...), ты создаёшь один массив temps и кладёшь туда все значения.

Основной синтаксис

В C# массив — это набор элементов одного типа. Чтобы создать массив, нужно указать тип элементов, квадратные скобки [] и размер (количество элементов).

1. Создание пустого массива фиксированного размера

// Создаём массив на 5 целых чисел. Все элементы по умолчанию равны 0.
int[] numbers = new int[5];

2. Создание массива с начальными значениями

string[] fruits = new string[] { "яблоко", "банан", "апельсин" };

Короткая запись (C# сам догадается, что это массив строк):

string[] fruits = { "яблоко", "банан", "апельсин" };

3. Доступ к элементам по индексу

Нумерация элементов в массиве начинается с нуля.

string[] fruits = { "яблоко", "банан", "апельсин" };
Console.WriteLine(fruits[0]); // Выведет: яблоко
Console.WriteLine(fruits[2]); // Выведет: апельсин

4. Изменение элемента

fruits[1] = "киви"; // Теперь вместо банана в массиве киви
Console.WriteLine(fruits[1]); // Выведет: киви

5. Длина массива (сколько элементов)

Console.WriteLine(fruits.Length); // Выведет: 3

6. Перебор всех элементов (цикл for)

int[] temps = { 20, 22, 19, 25, 23 };
for (int i = 0; i < temps.Length; i++)
{
    Console.WriteLine($"День {i+1}: {temps[i]} градусов");
}

Разбор типичных задач

Задача 1. «Фрукты» (создание и вывод списка)

Владелец магазина записал фрукты за неделю. Нужно вывести их на экран.

string[] fruits = { "яблоко", "груша", "банан", "апельсин", "киви", "персик", "виноград" };
Console.WriteLine("Список фруктов за неделю:");
for (int i = 0; i < fruits.Length; i++)
{
    Console.WriteLine($"{i+1}. {fruits[i]}");
}

Вывод:

Список фруктов за неделю:
1. яблоко
2. груша
3. банан
4. апельсин
5. киви
6. персик
7. виноград

Задача 2. «Робот-сортировщик» (поиск нужных элементов)

Робот отбирает детали с серийными номерами больше 100. Нужно вывести их.

int[] details = { 45, 102, 78, 150, 33, 200, 99 };
Console.WriteLine("Детали для следующего этапа (номер > 100):");
for (int i = 0; i < details.Length; i++)
{
    if (details[i] > 100)
    {
        Console.WriteLine(details[i]);
    }
}

Вывод:

Детали для следующего этапа (номер > 100):
102
150
200

Задача 3. «Запас материалов» (изменение элемента по индексу)

Во втором пункте списка (индекс 1) нужно удвоить количество хлеба.

int[] stock = { 10, 5, 20, 8, 15 }; // 0-молоко, 1-хлеб, 2-масло...
stock[1] = stock[1] * 2; // Удваиваем хлеб
Console.WriteLine("Обновлённый список запасов:");
for (int i = 0; i < stock.Length; i++)
{
    Console.WriteLine($"Пункт {i+1}: {stock[i]}");
}

Вывод:

Обновлённый список запасов:
Пункт 1: 10
Пункт 2: 10
Пункт 3: 20
Пункт 4: 8
Пункт 5: 15

Задача 4. «Суп в школе» (подсчёт суммы и среднего)

Нужно посчитать, сколько всего порций супа приготовлено за неделю и среднее количество в день.

int[] soup = { 30, 25, 40, 20, 35 }; // ПН-ПТ
int total = 0;
for (int i = 0; i < soup.Length; i++)
{
    total = total + soup[i];
}
double average = (double)total / soup.Length;
Console.WriteLine($"Всего порций: {total}");
Console.WriteLine($"В среднем в день: {average}");

Вывод:

Всего порций: 150
В среднем в день: 30

Задача 5. «Юный альпинист» (поиск элементов больше порога)

Вася записывал высоту каждый день. Нужно вывести дни, когда высота была больше 1000 метров.

int[] heights = { 500, 1200, 800, 1500, 600, 1100, 900 };
Console.WriteLine("Дни, когда Вася был выше 1000 метров:");
for (int i = 0; i < heights.Length; i++)
{
    if (heights[i] > 1000)
    {
        Console.WriteLine($"День {i+1}: {heights[i]} м");
    }
}

Вывод:

Дни, когда Вася был выше 1000 метров:
День 2: 1200 м
День 4: 1500 м
День 6: 1100 м

Частые ошибки новичков

  • Выход за границы массива. Если массив создан на 5 элементов, а ты пытаешься обратиться к array[5] (шестой элемент), программа вылетит с ошибкой. Помни: последний элемент всегда имеет индекс Length - 1.
  • Путаница с началом отсчёта. Первый элемент — это индекс 0, а не 1. Если тебе нужно вывести «первый, второй, третий», используй i+1 для нумерации на экране, но в коде обращайся к array[i].
  • Забыл указать размер. При создании пустого массива обязательно пиши new int[10] (или любое другое число). Без размера компилятор выдаст ошибку.
  • Использование неинициализированных элементов. Если ты создал массив, но не заполнил его значениями, в числовых массивах будут нули, а в строковых — пустые строки. Это не всегда то, что нужно.

Итоговый пример: «Лучший ученик»

Учитель ввёл оценки пяти учеников. Нужно найти самую высокую оценку и вывести её.

int[] grades = new int[5];

Console.WriteLine("Введите 5 оценок:");
for (int i = 0; i < grades.Length; i++)
{
    Console.Write($"Оценка {i+1}: ");
    grades[i] = Convert.ToInt32(Console.ReadLine());
}

int maxGrade = grades[0]; // Предполагаем, что первая оценка — самая высокая
for (int i = 1; i < grades.Length; i++)
{
    if (grades[i] > maxGrade)
    {
        maxGrade = grades[i];
    }
}

Console.WriteLine($"Лучшая оценка: {maxGrade}");

Пример работы программы:

Введите 5 оценок:
Оценка 1: 4
Оценка 2: 5
Оценка 3: 3
Оценка 4: 5
Оценка 5: 2
Лучшая оценка: 5

Массивы — это мощный инструмент. Они помогают хранить много данных и легко с ними работать. Главное — помнить про индексы и границы. Потренируйся на задачах, и ты быстро освоишь эту тему!