Учебное пособие по массивам C#: создание, объявление, инициализация

⚡ Умное резюме

В C# массивы хранят коллекцию элементов фиксированного размера, имеющих один и тот же тип данных, под одним именем переменной. Каждый элемент находится по индексу, начинающемуся с нуля, поэтому объявление, инициализация и доступ к значениям остаются быстрыми и предсказуемыми.

  • 📌 Определение: Массив хранит несколько значений одного типа в индексированных позициях, доступ к которым осуществляется через одну переменную.
  • ✅ Декларация: Тип данных, за которым следуют квадратные скобки и имя, объявляет массив, например, Int32[] values.
  • 🔢 инициализации: Ключевое слово new задает размер, после чего каждый индекс получает значение, например, values[0]=1.
  • 🔍 Доступ: Индексация с нуля позволяет читать или записывать любой элемент, поэтому первым элементом является values[0], и отсчет начинается с 0.
  • 🔁 Итерация: Цикл foreach проходит по каждому элементу без указания индекса, что позволяет избежать ошибок выхода за пределы диапазона в больших массивах.
  • 🤖 Помощь ИИ: GitHub Copilot генерирует шаблонные массивы, а ML.NET загружает числовые массивы в качестве признаков для моделей машинного обучения.

Массивы C#

Что такое массивы в C#?

Массив используется для хранения коллекции или серии элементов. Эти элементы будут одного типа.

Например, если у вас есть массив целочисленных значений, этот массив может представлять собой набор таких значений, как [1, 2, 3, 4]. Здесь количество элементов в массиве равно 4.

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

Эта переменная будет указывать на массив или список элементов, который будет отвечать за хранение элементов массива.

Давайте посмотрим, как мы можем работать с массивами в C#. В нашем примере мы объявим массив целых чисел и будем работать с ними соответствующим образом.

Обратите внимание, что весь приведенный ниже код вносится в файл Program.cs.

Шаг 1) Объявление массива. Первым шагом является объявление массива. Давайте посмотрим, как мы можем добиться этого, на примере кода ниже.

Массивы в C #

Code Объяснение:-

  1. Первая часть - это тип данных. Он определяет тип элементов, используемых в массиве. Итак, в нашем случае мы создаем массив целых чисел.
  2. Вторая часть [ ] определяет ранг массива. (Ранг — это заполнитель, который определяет количество элементов, которые будет содержать массив)
  3. Далее идет имя массива, который в нашем случае — «значения». Обратите внимание, что вы видите зеленую волнистую линию, не беспокойтесь об этом. Это просто .Net говорит, что вы объявили массив, но нигде его не используете.

Шаг 2) Следующий шаг — инициализация массива. Здесь мы собираемся указать количество значений, которые будет содержать массив. Мы также собираемся присвоить значения каждому элементу массива.

Массивы в C #

Code Объяснение:-

  1. Во-первых, мы устанавливаем количество элементов, которые будет содержать массив, равным 3. Таким образом, в квадратных скобках мы говорим, что массив будет содержать 3 элемента.
  2. Затем мы присваиваем значения каждому элементу массива. Это можно сделать, указав имя переменной + индекс в массиве. Например, values[0] означает, что мы сохраняем значение в первой позиции массива. Аналогично, для доступа ко второй позиции мы используем обозначение values[1] и так далее.

Внимание: – В массивах позиция индекса начинается с 0.

Шаг 3) Давайте теперь отобразим отдельные элементы массива в Консоли. Давайте добавим приведенный ниже код, чтобы добиться этого.

Массивы в C #

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args) 
  {
   Int32[] value;
   value=new Int32[3];
   
   value[0]=1;
   value[1]=2;
   value[2]=3;
   
   Console.WriteLine(value[0]);
   Console.WriteLine(value[1]);
   Console.WriteLine(value[2]);
    
   Console.ReadKey(); 
  }
 }
}

Code Объяснение:-

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

Обратите внимание: мы снова получаем доступ к каждому элементу с помощью имени переменной массива вместе с позицией индекса.

Если приведенный выше код введен правильно и программа выполнена, будет отображен следующий вывод.

Выход:

Массивы в C #

Из вывода вы можете увидеть все значения массива, отображаемые в консоли.

Как перебирать элементы массива в C# с помощью цикла foreach

Чтение каждого элемента по его индексу работает, но становится утомительным, когда массив содержит много значений. Цикл foreach предлагает более чистый способ последовательного обхода каждого элемента массива без использования циклов foreach. tracСоздайте переменную индекса самостоятельно.

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

using System;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   Int32[] values = new Int32[3] {1, 2, 3};
   foreach (Int32 item in values)
   {
    Console.WriteLine(item);
   }
   Console.ReadKey();
  }
 }
}

В приведенном выше примере объявляется и инициализируется массив из трех целых чисел, а затем происходит обход этого массива с помощью цикла foreach. На каждом проходе переменная пункт получает следующее значение, и Console.WriteLine выводит его. В результате на отдельных строках отображаются числа 1, 2 и 3.

Основные моменты, которые следует помнить при использовании цикла foreach с массивами:

  • Переменная цикла доступна только для чтения, поэтому цикл foreach лучше подходит для чтения значений, а не для их изменения на месте.
  • Изменять элементы во время просмотраpingВместо этого используйте цикл for с индексом.
  • Функция foreach работает с одномерными массивами, многомерными массивами и любыми коллекциями, поддерживающими итерацию.

Многомерные массивы в C#

Представленные до сих пор массивы являются одномерными, то есть хранят простой список значений. C# также поддерживает многомерные массивы, элементы которых располагаются в виде сетки строк и столбцов. Двумерный массив является наиболее распространенной формой и подходит для таких данных, как матрицы, игровые поля и таблицы.

Двумерный массив объявляется путем заключения в квадратные скобки запятой. Каждая дополнительная запятая добавляет еще одно измерение, поэтому int[,] — двумерный массив, а int[,,] — трехмерный. Поиск элементов осуществляется по одному индексу для каждого измерения.

using System;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   int[,] matrix = new int[2, 2] { {1, 2}, {3, 4} };
   Console.WriteLine(matrix[0, 0]);
   Console.WriteLine(matrix[1, 1]);
   Console.ReadKey();
  }
 }
}

Здесь массив matrix содержит две строки и два столбца. Элемент matrix[0, 0] возвращает 1, а matrix[1, 1] возвращает 4. Количество измерений фиксируется при объявлении массива, а размер каждого измерения задается при его создании.

C# Зубчатые массивы

Неровный массив — это массив, элементы которого сами являются массивами. В отличие от прямоугольного многомерного массива, каждый внутренний массив может иметь разную длину, поэтому неровный массив часто называют массивом массивов. Такая гибкость полезна, когда строки естественным образом содержат разное количество значений.

Вы объявляете массив с неровными краями, используя две пары квадратных скобок, а затем создаете каждый внутренний массив отдельно. В следующем примере создается массив с неровными краями, где первая строка содержит три значения, а вторая — два.

using System;
namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   int[][] jagged = new int[2][];
   jagged[0] = new int[] {1, 2, 3};
   jagged[1] = new int[] {4, 5};
   Console.WriteLine(jagged[0][2]);
   Console.WriteLine(jagged[1][1]);
   Console.ReadKey();
  }
 }
}

Выражение jagged[0][2] считывает третий элемент первой строки, равный 3, а jagged[1][1] считывает второй элемент второй строки, равный 5. Поскольку каждая строка представляет собой отдельный массив, jagged-массивы эффективно используют память при изменении длины строк, хотя для инициализации каждого внутреннего массива требуется дополнительный шаг.

Часто задаваемые вопросы (FAQ)

Свойство Length возвращает общее количество элементов в массиве C#. Например, values.Length возвращает 3 для массива из трех элементов. Для многомерных массивов GetLength(dimension) возвращает размер каждого конкретного измерения.

Массив AC# имеет фиксированный размер, устанавливаемый при создании, в то время как список динамически увеличивается и уменьшается. Массивы быстрее работают с фиксированными данными и используют меньше накладных расходов, тогда как список подходит для коллекций, количество элементов в которых изменяется во время выполнения.

Стандартный массив C# хранит элементы только одного объявленного типа, поэтому смешивание типов не допускается. Для хранения элементов разных типов можно объявить массив object[] или использовать коллекцию, например ArrayList, хотя оба варианта жертвуют безопасностью типов на этапе компиляции.

Статический метод Array.Sort упорядочивает элементы массива C# в порядке возрастания на месте. Передайте массив в метод Array.Sort(values) и используйте Array.Reverse Затем сортировка в порядке убывания. Сортировка работает с числами, строками и другими подобными типами данных.

Метод Array.Copy дублирует диапазон элементов из одного массива в другой, тогда как метод Clone создает поверхностную копию всего массива. Присваивание одной переменной массива другой копирует только ссылку, а не сами элементы.

Исключение IndexOutOfRangeException возникает, когда код обращается к позиции в массиве, которой не существует, например, к values[5] в трехэлементном массиве. Поскольку массивы C# имеют нулевую индексацию, допустимые индексы находятся в диапазоне от 0 до Length минус один. Всегда сначала проверяйте индекс.

Да. GitHub Copilot предлагает объявления массивов, инициализацию и логику циклов из комментария или имени метода в Visual Studio. VS Code. RevПросмотрите каждое предложение по правильному определению размера и границ индекса, поскольку Copilot может вносить ошибки, связанные со смещением на единицу и выходом за пределы диапазона.

В ML.NET векторы признаков и входные данные модели представляются в виде массивов C#, обычно массивов типа float[]. Обучающие данные загружаются в массивы или блоки, а прогнозы возвращают массивы оценок. Фиксированный размер и быстрая индексация массивов делают их эффективными для конвейеров машинного обучения.

Подведем итог этой публикации следующим образом: