English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# Основной уровень教程

C# Уровень 2教程

C# ООП (Объектно-ориентированное программирование)

Массивы (Array) в C#

Переменные используются для хранения литеральных значений, а массивы - для хранения множества литеральных значений.

Массив - это структура данных, которая хранит фиксированное количество текстовых значений (элементов) одного типа. Элементы массива хранятся последовательно в памяти.

В C# массив может быть трёх типов: одномерный массив, многомерный массив и решётчатый массив. В этом разделе вы узнаете о одномерных массивах.

На следующем рисунке показано представление массива.

Представление массива

Объявление и инициализация массива

Массив можно объявить, указав тип элементов в квадратных скобках [].

int[] evenNums; // массив целых чисел
string[] cities; // массив строк

Следующие строки объявляют массив и добавляют значения в него в одном предложении.

int[] evenNums = new int[5]{ 2, 4, 6, 8, 10 }; 
string[] cities = new string[3]{ "Mumbai", "London", "New York" };

В этом случае, массив evenNums может хранить до пяти целых чисел. Число 5 в квадратных скобках [] указывает на размер массива. Также, размер массива cities составляет 3. Элементы массива добавляются в список, разделенный запятыми, внутри фигурных скобок {}.

Типовые переменные массива можно определить с помощью var, без квадратных скобок [].

var evenNums = new int[]{ 2, 4, 6, 8, 10 } 
var cities = new string[]{ "Mumbai", "London", "New York" }

Если необходимо добавить элементы массива при его объявлении, размер является опциональным. Компилятор определяет размер массива на основе количества элементов в фигурных скобках, как показано ниже.

int[] evenNums = { 2, 4, 6, 8, 10 }; 
string[] cities = { "Mumbai", "London", "New York" }

В следующем примере показано, как создать массив с ошибкой.

// Размер должен быть указан 
int[] evenNums = new int[]; 
// Количество элементов должно соответствовать заданному размеру 
int[] evenNums = new int[5] { 2, 4 };
// var не может быть использован с массивом инициализации
var evenNums = { 2, 4, 6, 8, 10 };

Отложенная инициализация

Не обязательно声明 и инициализировать массив в одном предложении. Вы можете сначала声明 массив, а затем использовать оператор new для его инициализации.

int[] evenNums;
evenNums = new int[5];
// или
evenNums = new int[]{ 2, 4, 6, 8, 10 };

Доступ к элементам массива

Элементы массива можно доступа с помощью индекса. Индекс - это номер, связанный с каждым элементом массива, начинающийся с индекса 0 и заканчивающийся размером массива - 1.

В следующем примере показано, как использовать индекс для добавления/обновления и извлечения элементов массива.

int[] evenNums = new int[5];
evenNums[0] = 2;
evenNums[1] = 4;
//evenNums[6] = 12; // Вызывает исключение IndexOutOfRange в время выполнения
Console.WriteLine(evenNums[0]); // Вывод 2
Console.WriteLine(evenNums[1]); // Вывод 4

Обратите внимание, что попытка добавить элемент, превышающий его заданный размер, вызывает исключение IndexOutOfRangeException.

Использование цикла for для доступа к массиву

Использование цикла for для доступа к элементам массива. В условиях выражения цикла for используется свойство length массива.

int[] evenNums = { 2, 4, 6, 8, 10 };
for(int i = 0; i < evenNums.Length; i++) {
    Console.WriteLine(evenNums[i]);  
}
for(int i = 0; i < evenNums.Length; i++) {
    evenNums[i] = evenNums[i] + 10; // обновить значение каждого элемента на 10
}

Использование foreach цикла для доступа к массиву

Использование цикла foreach для чтения значений элементов массива без использования индекса.

int[] evenNums = { 2, 4, 6, 8, 10 }; 
string[] cities = { "Mumbai", "London", "New York" }; 
foreach(var item in evenNums) {
    Console.WriteLine(item);   
}
foreach(var city in cities) {
    Console.WriteLine(city);
}

Методы LINQ

Все массивы в C# производятся от абстрактного базового класса System.Array.

Класс Array реализует интерфейс IEnumerable, что позволяет использовать расширяемые методы LINQ, такие как Max(), Min(), Sum(), reverse() и т.д.

int[] nums = new int[5]{ 10, 15, 16, 8, 6 };
nums.Max(); // возвращает 16
nums.Min(); // возвращает 6
nums.Sum(); // возвращает 55
nums.Average(); // возвращает 55

Класс System.Array также включает методы для создания, работы, поиска и сортировки массивов.

int[] nums = new int[5]{ 10, 15, 16, 8, 6 };
Array.Sort(nums); // сортировка массива 
Array.Reverse(nums); // сортировка массива по убыванию
Array.ForEach(nums, n => Console.WriteLine(n)); // итерация массива
Array.BinarySearch(nums, 5); // двоичный поиск

Передача массива в качестве аргумента

Массив можно передавать в качестве аргумента метода. Массив является типом ссылок, поэтому этот метод может изменить значение элементов массива.

public static void Main() {
    int[] nums = { 1, 2, 3, 4, 5 };
    UpdateArray(nums); 
    foreach(var item in nums)
        Console.WriteLine(item);   
}
                    
public static void UpdateArray(int[] arr)
{
    for(int i = 0; i < arr.Length; i++)
        arr[i] = arr[i] + 10;   
}

Далее Много维ентный массив и Зубчатый массив.