C#

Массивы C#: как создать, заполнить и пройти циклом

Массив в C# хранит несколько значений одного типа: числа, строки, объекты. Размер массива задается при создании и дальше не меняется. К элементам обращаются по индексу, а количество элементов узнают через свойство Length

Создать массив

Массив из пяти чисел:

int[] numbers = new int[5];

Пока значения не заданы, элементы равны 0, потому что это значение по умолчанию для int

Можно сразу записать значения:

int[] numbers = { 10, 20, 30, 40, 50 };
string[] names = { "Анна", "Илья", "Мария" };

Тип указывается один раз: int[] означает массив целых чисел, string[] — массив строк

Индексы

Индексы начинаются с нуля:

Console.WriteLine(numbers[0]); // 10
Console.WriteLine(numbers[1]); // 20

Последний элемент имеет индекс Length - 1:

Console.WriteLine(numbers[numbers.Length - 1]);

Если обратиться к индексу за пределами массива, будет ошибка IndexOutOfRangeException

Заполнить массив циклом

int[] numbers = new int[5];

for (int i = 0; i < numbers.Length; i++)
{
    numbers[i] = (i + 1) * 10;
}

После цикла в массиве будут значения 10, 20, 30, 40, 50

Для вывода удобно использовать foreach:

foreach (int number in numbers)
{
    Console.WriteLine(number);
}

foreach хорош, когда нужно просто пройти по всем элементам. for нужен, когда важен индекс или нужно записывать значения по позициям

Изменить элемент

numbers[2] = 99;

Это заменит третий элемент, потому что индекс 2 означает третью позицию

Массив строк

string[] products = { "Курс", "Консультация", "Аудит" };

foreach (string product in products)
{
    Console.WriteLine(product);
}

Массивы строк часто используют для меню, списков названий, простых справочников

Можно вывести меню с номерами:

for (int i = 0; i < products.Length; i++)
{
    Console.WriteLine($"{i + 1}. {products[i]}");
}

Здесь пользователю показывают номера с единицы, но внутри кода массив все равно читается по индексам с нуля

Если пользователь выбирает пункт меню, его ввод обычно нужно уменьшить на единицу:

int userChoice = 2;
int index = userChoice - 1;
Console.WriteLine(products[index]);

Так внешний номер меню и внутренний индекс не смешиваются

Массив или List

Массив удобен, когда размер известен заранее: 12 месяцев, 7 дней недели, 5 оценок. Если количество элементов будет меняться, чаще удобнее List<T>

List<string> tasks = new();
tasks.Add("Позвонить клиенту");
tasks.Add("Отправить счет");

У списка есть Add, а у массива нет. Зато массив проще и хорошо подходит для первых задач на циклы и индексы

Частые ошибки

Первая ошибка — думать, что первый элемент имеет индекс 1. В C# первый индекс всегда 0. Вторая — писать numbers[numbers.Length], хотя последний индекс numbers.Length - 1. Третья — пытаться добавить элемент в массив без создания нового массива или перехода на List<T>. Четвертая — путать Length у массива и Count у списка

Еще одна частая путаница — ожидать, что массив сам увеличится при присваивании нового индекса. Так не работает: numbers[10] = 5 не расширит массив, а вызовет ошибку, если в массиве меньше одиннадцати элементов

Мини-задача: создайте массив из пяти оценок, выведите все оценки, посчитайте сумму и среднее значение. Затем замените одну оценку по индексу и снова выведите массив

Что почитать дальше по C#

Что почитать дальше по C#

Если нужен общий маршрут по теме, откройте рубрику C#. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x