Массивы в C#. Одномерные массивы - C# и .NET

Массивы в C#. Одномерные массивы

Массивы в C# – это ссылочные типы данных, используемые для хранения набора значений одного типа. Умение работать с массивами – это один из базовых навыков, которыми должен обладать разработчик. В этой части мы познакомимся с тем, что из себя представляют массивы в C#, зачем использовать массивы, какие они бывают и, конечно, научимся использовать массивы в своих приложениях на C#.

Массивы в C#

Зачем нужны массивы?

Как мы уже знаем, в один момент времени одна переменная базового типа может хранить одно значение, например,

int a = 5;
a = 10; //теперь у переменной новое значение

Если мы захотим использовать два значения – мы заведем две переменных. Для трех значений три и так далее. Но, допустим, мы захотим хранить в нашей программе не три, а сто значений. Как в этом случае поступить? Можно, конечно, сделать и так:

int a1 = 1;
int a2 = 5;
int a3 = 3;
...
int a50 = 67;
int a51 = 56;
...
int a99 = 98;
int a100 = 100;

Но, проще заправить шубу в брюки, чем определять 100 однотипных переменных. Во-первых, вы потеряете уйму времени на написание однотипного кода, во-вторых, такой код будет очень сложно управляем и, в-третьих, для хранения однотипных данных есть массив. Вместо 100 переменных мы можем объявить всего одну – массив на 100 значений и работать с ним. Доступ к элементам массива осуществляется по их индексам.

Виды массивов в C#

В C# есть различные виды массивов. Можно выделить такие виды массивов, как:

  • одномерные массивы
  • многомерные массивы
  • зубчатые массивы или массивы массивов

С различными видами массивов мы познакомимся здесь и в следующих частях руководства. И начнем с одномерных массивов.

Визуализация одномерного массива

Вот как можно представить себе одномерный массив C#:

Массивы в C#. Одномерные массивы

Одномерный массив в C# можно представить как ряд элементов одного типа в котором доступ к каждому элементу осуществляется по его индексу. При этом, обратите внимание, что значение индекса первого элемента в C# – ноль.

Как создать одномерный массив в C#

Объявление и инициализация массива в C#, общем случае, выглядит следующим образом:

Type[] array_name = new Type[Size]

здесь Type– это тип данных, массив которых мы хотим создать, а array_name– имя переменной-массива, Size, а new– это специальное ключевое слово C# с помощью которого выделяется память под переменную. Например, если мы захотим создать массив на 100 целых чисел, то мы можем сделать это следующим образом:

int[] myArray = new int[100];

Мы можем создавать массивы любых типов, например,

string[] stringArray = new string[5];//массив на 5 строк
double[] doubleArray = new double[10];//массив на 10 чисел с плавающей запятой

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

Как только мы инициализируем массив с использованием ключевого слова new, то каждый его элемент получает значение по умолчанию. Например, если мы создаем массив чисел, то каждый элемент такого массива будет иметь значение 0. Чтобы задать элементу массива другое значение, необходимо обратиться к этому элементу по индексу. Например, инициализируем массив чисел на 3 элемента и присвоим каждому элементу значение:

int[] numbers = new int[3];
int[0] = 10; //задаем значение первого элемента
int[1] = 14; //задаем значение второго элемента
int[2] = 1;  //задаем значение третьего элемента

Язык C# – это достаточно гибкий и развивающийся язык программирования, поэтому не стоит удивляться, что некоторые операции в этом языке можно выполнить различными способами. И создание и инициализация массивов здесь – не исключение. Ниже представлены различные варианты создания и инициализации массивов в C#, вплоть до C# 12:

int[] intArray2 = new int[] { 10, 7, -3 };
int[] intArray3 = new[] { 10, 7, -3, 18 };
int[] intArray4 = { 10, 7, -3, 18 };
int[] intArray5 = [10, 7, -3, 18];

Во всех этих вариантах будет выполнено одно и то же – создан массив на 3 элемента и каждый элемент получит своё значение.

Массивы в C#: основные свойства и методы

Массив в C#, как и любой другой тип данных имеет свои свойства и методы. Чтобы увидеть их в Visual Studio, достаточно написать имя массива и поставить точку – появится список:

Ниже, в таблице перечислены основные свойства массива с которыми мы будем чаще всего работать:

Название Тип данных Описание
Length int Возвращает общее число элементов во всех измерениях массива
Rank int Получает ранг (число измерений) массива
LongLength long Возвращает 64-разрядное целое число, представляющее общее число элементов во всех измерениях массива

Основные методы массивов следующие:

Название Тип данных Описание
GetLength() int Возвращает 32-разрядное целое число, представляющее количество элементов в заданном измерении массива
GetLowerBound() int Получает Индекс первого элемента заданного измерения в массиве
GetUpperBound() int Получает Индекс последнего элемента заданного измерения в массиве.

Попробуем воспользоваться этими свойствами и методами на практике.

Перебор элементов одномерного массива в C#

Итак, мы объявили и инициализировали массив. Как перебрать все его элементы? Здесь мы можем воспользоваться для работы любым циклом, однако, наиболее часто для этих целей используются два вида циклов – forи foreach. Рассмотрим оба варианта перебора на примере одномерного массива на 10 элементов.

Использование цикла for

int[] numbers = new int[10];

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

Здесь мы инициализируем массив и задаем каждому элементу массива значение равное его индексу, то есть в итоге, наш массив будет содержать числа от 0 до 9. Здесь мы запускаем цикл, используя условие:

i < numbers.Length

Так как первый индекс в массиве имеет значение 0, то цикл перебирает элементы с индексами от 0 до 9 включительно. В приведенном выше примере мы последовательно прошлись по всему массиву, используя индексы элементов, и присвоили каждому элементу значение. Но удобство цикла forдля перебора элементов массива заключается ещё и в том, что мы можем с помощью него обеспечить доступ к элементам массива не соблюдая строгий порядок типа 0, 1, 2, 3 индекс и так далее. Например, мы можем обеспечить доступ только к четным элементам:

for (int i = 0; i < numbers.Length; i = i + 2)
{
    Console.WriteLine($"Элемент {i} - {numbers[i]}" );
}

Здесь обратите внимание на итератор цикла:

i = i + 2

Таким образом, мы на каждой итерации цикла получим доступ к очередному четному элементу массива, начиная с 0 и в консоли увидим:Массивы в C#

 

Использование цикла foreach

Цикл foreachудобно использовать для последовательного перебора элементов массива. При этом, если в цикле forмы оперируем индексами элементов массива, то в цикле foreach мы используем тип элемента массива. Для наглядности, объявим вот такой массив:

string[] strings = { "Hello, World!", "Привет, мир!", "Массивы - это круто!"};

Теперь переберем все элементы массива:

foreach (string s in strings)
{ 
    Console.WriteLine(s); 
}

Обратите внимание на тип элемента в цикле – string– это тип элементов массива.

Подведем итог

Массивы позволяют хранить несколько значений одного типа и получать к ним доступ по индексу. Наиболее простой вид массивов – одномерные массивы, которые можно представить как ряд (или столбец) значений одного типа. Для перебора элементов массива используются циклы.

Домашнее задание №20

Дан массив из 10 чисел. Вывести сумму всех элементов положительных элементов массива.