Массивы (списки) в 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
Массивы — это мощный инструмент. Они помогают хранить много данных и легко с ними работать. Главное — помнить про индексы и границы. Потренируйся на задачах, и ты быстро освоишь эту тему!