Array Dimensions in Visual Basic
Измерение — это направление, в котором можно изменить спецификацию элементов массива. Массив, содержащий общий объем продаж для каждого дня месяца, имеет одно измерение (день месяца). Массив, содержащий общий объем продаж по отделу для каждого дня месяца, имеет два измерения (номер отдела и день месяца). Число измерений массива называется его рангом.
Свойство можно использовать Rank для определения количества измерений массива.
Работа с измерениями
Укажите элемент массива, указав индекс или подстрок для каждого из его измерений. Элементы являются смежными по каждому измерению от индекса 0 до самого высокого индекса для этого измерения.
На следующих рисунках показана концептуальная структура массивов с разными рангами. Каждый элемент на иллюстрациях показывает значения индекса, к которым он обращается. Например, можно получить доступ к первому элементу второй строки двухмерного массива, указав индексы (1, 0) .
Одно измерение
Многие массивы имеют только одно измерение, например число людей каждого возраста. Единственное требование указать элемент — возраст, для которого этот элемент содержит число. Поэтому такой массив использует только один индекс. В следующем примере объявляется переменная для хранения одномерного массива возрастов в возрасте от 0 до 120 лет.
Dim ageCounts(120) As UInteger
Два измерения
Некоторые массивы имеют два измерения, например количество офисов на каждом этаже каждого здания в кампусе. Для спецификации элемента требуется как номер здания, так и этаж, и каждый элемент содержит счетчик для этого сочетания здания и пола. Поэтому такой массив использует два индекса. В следующем примере объявляется переменная для хранения двухмерного массива офисных счетчиков для зданий от 0 до 40 и этажей от 0 до 5.
Dim officeCounts(40, 5) As Byte
Двухмерный массив также называется прямоугольным массивом .
Три измерения
Несколько массивов имеют три измерения, такие как значения в трехмерном пространстве. Такой массив использует три индекса, которые в данном случае представляют координаты x, y и z физического пространства. В следующем примере объявляется переменная для хранения трехмерного массива температур воздуха в различных точках в трехмерном объеме.
Dim airTemperatures(99, 99, 24) As Single
Более трех измерений
Хотя массив может иметь до 32 измерений, редко имеет более трех размеров.
При добавлении измерений в массив общий объем хранилища, необходимого массиву, значительно увеличивается, поэтому используйте многомерные массивы с осторожностью.
Использование различных измерений
Предположим, что вы хотите отслеживать объемы продаж за каждый день текущего месяца. Можно объявить одномерный массив с 31 элементами, по одному для каждого дня месяца, как показано в следующем примере.
Dim salesAmounts(30) As Double
Теперь предположим, что вы хотите отслеживать одну и ту же информацию не только для каждого дня месяца, но и для каждого месяца года. Вы можете объявить двухмерный массив с 12 строками (в течение месяцев) и 31 столбцами (в течение дней), как показано в следующем примере.
Dim salesAmounts(11, 30) As Double
Теперь предположим, что вы решили хранить данные массива более одного года. Если вы хотите отслеживать объемы продаж в течение 5 лет, можно объявить трехмерный массив с 5 уровнями, 12 строками и 31 столбцами, как показано в следующем примере.
Dim salesAmounts(4, 11, 30) As Double
Обратите внимание, что, поскольку каждый индекс зависит от 0 до максимального значения, каждое измерение salesAmounts объявляется как одно меньше требуемой длины для этого измерения. Обратите внимание, что размер массива увеличивается при каждом новом измерении. Три размера в предыдущих примерах: 31, 372 и 1860 элементов соответственно.
Массив можно создать без использования Dim инструкции или New предложения. Например, можно вызвать CreateInstance метод или другой компонент может передать код массиву, созданному таким образом. Такой массив может иметь нижнюю границу, отличное от 0. Вы всегда можете проверить нижнюю границу измерения с помощью GetLowerBound метода или LBound функции.
См. также
- Массивы
- Устранение неполадок, связанных с массивами
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Сколько измерений будет у следующего массива
Массив (array) является объектом с элементами расположенными в соответствие с декартовой системой координат.
Количество измерений массива называется ранг (это терминология взята из APL). Ранг является неотрицательных целым. Также каждое измерение само по себе является неотрицательным целым. Общее количество элементов в массиве является произведением размеров всех измерений.
Реализация Common Lisp’а может налагать ограничение на ранг массива, но данное ограничение не может быть менее 7. Таким образом, любая Common Lisp программа может использовать массивы с семью и менее измерениями. (Программа может получить текущее ограничение для ранга для используемой системы с помощью константы array-rank-limit.)
Допускается существование нулевого ранга. В этом случае, массив не содержит элементов, и любой доступ к элементам является ошибкой. При этом другие свойства массива использоваться могут. Если ранг равен нулю, тогда массив не имеет измерений, и их произведение приравнивается к 1 (FIXME). Таким образом массив с нулевым рангом содержит один элемент.
Элемент массива задаётся последовательностью индексов. Длина данной последовательности должна равняется рангу массива. Каждый индекс должен быть неотрицательным целым строго меньшим размеру соответствующего измерения. Также индексация массива начинается с нуля, а не с единицы, как в по умолчанию Fortran’е.
В качестве примера, предположим, что переменная foo обозначает двумерный массив с размерами измерений 3 и 5. Первый индекс может быть 0, 1 или 2, и второй индекс может быть 0, 1, 2, 3 или 4. Обращение к элементам массива может быть осуществлено с помощью функции aref, например, (aref foo 2 1) ссылается на элемент массива (2, 1). Следует отметить, что aref принимает переменное число аргументов: массив, и столько индексов, сколько измерений у массива. Массив с нулевым рангом не имеет измерений, и в таком случае aref принимает только один параметр – массив, и не принимает индексы, и возвращает одиночный элемент массива.
В целом, массивы могут быть многомерными, могут иметь общее содержимое с другими массивами. и могут динамически менять свой размер после создания (и увеличивать, и уменьшать). Одномерный массив может также иметь указатель заполнения.
Многомерные массивы хранят элементы построчно. Это значит, что внутренне многомерный массив хранится как одномерный массив с порядком элементов, соответствующим лексикографическому порядку их индексов. Это важно в двух ситуациях: (1) когда массивы с разными измерениями имеют общее содержимое, и (2) когда осуществляется доступ к очень большому массиву в виртуальной памяти. (Первая ситуация касается семантики; вторая — эффективности)
Массив, что не указывает на другой массив, не имеет указателя заполнения и не имеет динамически расширяемого размера после создания называется простым массивом. Пользователи могут декларировать то, что конкретный массив будет простым. Некоторые реализации могут обрабатывать простые массивы более эффективным способом, например, простые массивы могут храниться более компактно, чем непростые.
Когда вызывается make-array, если один или более из :adjustable, :fill-pointer и :displaced-to аргументов равен истине, тогда является ли результат простым массивом не определено. Однако если все три аргумента равны лжи, тогда результат гарантированно будет простым массивом.
2.5.1 Векторы
В Common Lisp’е одномерные массивы называется векторами, и составляют тип vector (который в свою очередь является подтипом array). Вектора и списки вместе являются последовательностями. Они отличаются тем, что любой элемент одномерного массива может быть получен за константное время, тогда как среднее время доступа к компоненту для списка линейно зависит от длины списка, с другой стороны, добавление нового элемента в начала списка занимает константное время, тогда как эта же операция для массива занимает время линейно зависящее от длины массива.
Обычный вектор (одномерный массив, который может содержать любой тип объектов, но не имеющий дополнительных атрибутов) может быть записан с помощью перечисления элементов разделённых пробелом и окружённых #( и ). Например:
#(a b c) ;Вектор из трёх элементов
#() ;Пустой вектор
#(2 3 5 7 11 13 17 19 23 29 31 37 41 43 47)
;Вектор содержит простые числа меньшие пятидесяти
Следует отметить, что когда функция read парсит данный синтаксис, она всегда создаёт простой массив. __________________________________________
Обоснование: Многие люди рекомендовали использовать квадратные скобки для задания векторов так: [a b c] вместо #(a b c). Данная запись короче, возможно более читаема, и безусловно совпадает с культурными традициями в других областях компьютерных наук и математики. Однако, для достижения предельной полезности от пользовательских макросимволов, что расширяют возможности функции read, необходимо было оставить некоторые строковые символы для этих пользовательских целей. Опыт использования MacLisp’а показывает, что пользователи, особенно разработчики языков для использования в исследованиях искусственного интеллекта, часто хотят определять специальные значения для квадратных скобок. Таким образом Common Lisp не использует квадратных и фигурных скобок в своём синтаксисе.
Реализации могут содержать специализированные представления массивов для достижения эффективности в случаях, когда все элементы принадлежат одному определённому типу (например, числовому). Все реализации содержат специальные массивы в случаях, когда все элементы являются строковыми символами (или специализированное подмножество строковых символов). Такие одномерные массивы называются строки. Все реализации также должны содержать специализированные битовые массивы, которые принадлежат типу (array bit). Такие одномерные массивы называются битовые векторы.
2.5.2 Строки
base-string ≡ (vector base-char)
simple-base-string ≡ (simple-array base-char (*))
Реализация может поддерживать другие типы строк. Все функции Common Lisp’а взаимодействуют со строками одинаково. Однако следует отметить, вставка extended character в base string является ошибкой.
Строковый (string) тип является подтипом векторного (vector) типа.
Строка может быть записана как последовательность символов, с предшествующим и последующим символом двойной кавычки «. Любой символ « или \ в данной последовательности должен иметь предшествующий символ \.
«Foo» ;Строка из трёх символов
«» ;Пустая строка
«\»APL\\360?\» he cried.» ;Строка из двенадцати символов
«|x| = |-x|» ;Строка из десяти символов
Необходимо отметить, что символ вертикальной черты | в строке не должен быть экранирован с помощью \. Также как и любая двойная кавычка в имени символа, записанного с использованием вертикальных черт, не нуждается в экранировании. Записи с помощью двойной кавычки и вертикальной черты похожи, но используются для разных целей: двойная кавычка указывает на строку, содержащую строковые символы, тогда как вертикальная черта указывает на символ, имя которого содержит последовательность строковых символов.
Строковые символы обрамленные двойными кавычками, считываются слева направо. Индекс символа больше индекса предыдущего символа на 1. Самый левый символ строки имеет индекс 0, следующий 1, следующий 2, и т.д.
Следует отметить, что функция prin1 будет выводить на печать в данном синтаксисе любой вектор строковых символов (не только простой), но функция read при разборе данного синтаксиса будет всегда создавать простую строку.
2.5.3 Битовые векторы
Битовый вектор может быть записан в виде последовательности битов заключённых в строку с предшествующей #*; любой разделитель, например, как пробел завершает синтаксис битового вектора. Например:
#*10110 ;Пятибитный битовый вектор; нулевой бит 1
#* ;Пустой битовый вектор
Биты записанные после #*, читаются слева направо. Индекс каждого бита больше индекса предыдущего бита на 1. Индекс самого левого бита 0, следующего 1 и т.д.
Функция prin1 выводит любой битовый вектор (не только простой) в этом синтаксисе, однако функция read при разборе этого синтаксиса будет всегда создавать простой битовый вектор.
Массивы
В структуре данных массива можно хранить несколько переменных одного типа. Чтобы объявить массив, следует указать тип его элементов. Если требуется, чтобы массив мог хранить элементы любого типа, можно указать object в качестве его типа. В унифицированной системе типов C# все типы, стандартные и определяемые пользователем, ссылочные типы и типы значений напрямую или косвенно наследуются из Object.
type[] arrayName;
Массив имеет следующие свойства:
- Массив может быть одномерным, многомерным или многомерным.
- Число измерений задается при объявлении переменной массива. Длина каждого измерения устанавливается при создании экземпляра массива. Эти значения нельзя изменить во время существования экземпляра.
- Массив массивов является массивом массивов, и каждый массив элементов имеет значение null по умолчанию.
- Массивы индексируются от нуля: массив с n элементами индексируется от 0 до n-1 .
- Элементы массива могут иметь любой тип, в том числе тип массива.
- Типы массивов — это ссылочные типы, производные от абстрактного базового типа Array. Все массивы реализуют IList и IEnumerable. Для итерации по массиву можно использовать оператор foreach. Одномерные массивы также реализуют IList и IEnumerable .
Элементы массива можно инициализировать в известные значения при создании массива. Начиная с C# 12, все типы коллекций можно инициализировать с помощью выражения Collection. Элементы, которые не инициализированы, имеют значение по умолчанию. Значение по умолчанию — это 0-разрядный шаблон. Все ссылочные типы (включая типы, не допускающие значение NULL), имеют значения null . Все типы значений имеют 0-разрядные шаблоны. Это означает, Nullable.HasValue что свойство имеет false значение, и Nullable.Value свойство не определено. В реализации Value .NET свойство создает исключение.
В следующих примерах создаются одномерные массивы, многомерные массивы и массивы массивов:
// Declare a single-dimensional array of 5 integers. int[] array1 = new int[5]; // Declare and set array element values. int[] array2 = [1, 2, 3, 4, 5, 6]; // Declare a two dimensional array. int[,] multiDimensionalArray1 = new int[2, 3]; // Declare and set array element values. int[,] multiDimensionalArray2 = < < 1, 2, 3 >, < 4, 5, 6 >>; // Declare a jagged array. int[][] jaggedArray = new int[6][]; // Set the values of the first array in the jagged array structure. jaggedArray[0] = [1, 2, 3, 4];
Одномерные массивы
Одномерный массив — это последовательность таких элементов. Доступ к элементу осуществляется через его индекс. Индекс — это порядковое положение в последовательности. Первый элемент в массиве находится в индексе 0 . Для создания одномерного массива используется оператор new и указывается тип элементов массива и число элементов. В следующем примере объявляются и инициализируется одномерные массивы:
int[] array = new int[5]; string[] weekDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; Console.WriteLine(weekDays[0]); Console.WriteLine(weekDays[1]); Console.WriteLine(weekDays[2]); Console.WriteLine(weekDays[3]); Console.WriteLine(weekDays[4]); Console.WriteLine(weekDays[5]); Console.WriteLine(weekDays[6]); /*Output: Sun Mon Tue Wed Thu Fri Sat */
Первое объявление объявляет неинициализированный массив из пяти целых чисел от array[0] до array[4] . Элементы массива инициализируются до значения по умолчанию для типа элемента. Для целых чисел это 0 . Второе объявление объявляет массив строк и инициализирует все семь значений этого массива. Ряд Console.WriteLine операторов выводит все элементы массива weekDay . Для одномерных массивов оператор обрабатывает элементы в увеличении порядка индексов foreach , начиная с индекса 0 и заканчивая индексом Length — 1 .
Передача одномерных массивов в качестве аргументов
Инициализированный одномерный массив можно передать в метод. В следующем примере массив строк инициализируется и передается в качестве аргумента в метод DisplayArray для строк. Этот метод отображает элементы массива. Затем метод ChangeArray размещает элементы массива в обратном порядке, а метод ChangeArrayElements изменяет первые три элемента массива. После возврата каждого метода метод DisplayArray показывает, что передача массива по значению не препятствует изменению элементов массива.
class ArrayExample < static void DisplayArray(string[] arr) =>Console.WriteLine(string.Join(" ", arr)); // Change the array by reversing its elements. static void ChangeArray(string[] arr) => Array.Reverse(arr); static void ChangeArrayElements(string[] arr) < // Change the value of the first three array elements. arr[0] = "Mon"; arr[1] = "Wed"; arr[2] = "Fri"; >static void Main() < // Declare and initialize an array. string[] weekDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; // Display the array elements. DisplayArray(weekDays); Console.WriteLine(); // Reverse the array. ChangeArray(weekDays); // Display the array again to verify that it stays reversed. Console.WriteLine("Array weekDays after the call to ChangeArray:"); DisplayArray(weekDays); Console.WriteLine(); // Assign new values to individual array elements. ChangeArrayElements(weekDays); // Display the array again to verify that it has changed. Console.WriteLine("Array weekDays after the call to ChangeArrayElements:"); DisplayArray(weekDays); >> // The example displays the following output: // Sun Mon Tue Wed Thu Fri Sat // // Array weekDays after the call to ChangeArray: // Sat Fri Thu Wed Tue Mon Sun // // Array weekDays after the call to ChangeArrayElements: // Mon Wed Fri Wed Tue Mon Sun
Многомерные массивы
Массивы могут иметь несколько измерений. Например, следующие объявления создают четыре массива: два имеют два измерения, два имеют три измерения. Первые два объявления объявляют длину каждого измерения, но не инициализировать значения массива. Во втором двух объявлениях используется инициализатор для задания значений каждого элемента в многомерном массиве.
int[,] array2DDeclaration = new int[4, 2]; int[,,] array3DDeclaration = new int[4, 2, 3]; // Two-dimensional array. int[,] array2DInitialization = < < 1, 2 >, < 3, 4 >, < 5, 6 >, < 7, 8 >>; // Three-dimensional array. int[,,] array3D = new int[,,] < < < 1, 2, 3 >, < 4, 5, 6 >>, < < 7, 8, 9 >, < 10, 11, 12 >> >; // Accessing array elements. System.Console.WriteLine(array2DInitialization[0, 0]); System.Console.WriteLine(array2DInitialization[0, 1]); System.Console.WriteLine(array2DInitialization[1, 0]); System.Console.WriteLine(array2DInitialization[1, 1]); System.Console.WriteLine(array2DInitialization[3, 0]); System.Console.WriteLine(array2DInitialization[3, 1]); // Output: // 1 // 2 // 3 // 4 // 7 // 8 System.Console.WriteLine(array3D[1, 0, 1]); System.Console.WriteLine(array3D[1, 1, 2]); // Output: // 8 // 12 // Getting the total count of elements or the length of a given dimension. var allLength = array3D.Length; var total = 1; for (int i = 0; i < array3D.Rank; i++) < total *= array3D.GetLength(i); >System.Console.WriteLine($" equals "); // Output: // 12 equals 12
Для многомерных массивов элементы пересекаются таким образом, что индексы самого правого измерения увеличиваются сначала, а затем следующее левое измерение и т. д. до самого левого индекса. В следующем примере перечисляется как 2D, так и трехмерный массив:
int[,] numbers2D = < < 9, 99 >, < 3, 33 >, < 5, 55 >>; foreach (int i in numbers2D) < System.Console.Write($""); > // Output: 9 99 3 33 5 55 int[,,] array3D = new int[,,] < < < 1, 2, 3 >, < 4, 5, 6 >>, < < 7, 8, 9 >, < 10, 11, 12 >> >; foreach (int i in array3D) < System.Console.Write($""); > // Output: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
В массиве 2D можно считать левый индекс строкой и правым индексом в качестве столбца .
Однако с многомерными массивами, используя вложенный цикл, вы можете более контролировать порядок обработки элементов массива:
int[,,] array3D = new int[,,] < < < 1, 2, 3 >, < 4, 5, 6 >>, < < 7, 8, 9 >, < 10, 11, 12 >> >; for (int i = 0; i < array3D.GetLength(0); i++) < for (int j = 0; j < array3D.GetLength(1); j++) < for (int k = 0; k < array3D.GetLength(2); k++) < System.Console.Write($""); > System.Console.WriteLine(); > System.Console.WriteLine(); > // Output (including blank lines): // 1 2 3 // 4 5 6 // // 7 8 9 // 10 11 12 //
Передача многомерных массивов в качестве аргументов
Инициализированный многомерный массив можно передать в метод так же, как и одномерный массив. В следующем коде показано разделяемое объявление метода печати, который принимает в качестве аргумента двухмерный массив. Новый массив можно инициализировать и передать за один шаг, как показано в следующем примере. В следующем примере инициализируется двухмерный массив целых чисел, который передается в метод Print2DArray . Этот метод отображает элементы массива.
static void Print2DArray(int[,] arr) < // Display the array elements. for (int i = 0; i < arr.GetLength(0); i++) < for (int j = 0; j < arr.GetLength(1); j++) < System.Console.WriteLine("Element(,)=", i, j, arr[i, j]); > > > static void ExampleUsage() < // Pass the array as an argument. Print2DArray(new int[,] < < 1, 2 >, < 3, 4 >, < 5, 6 >, < 7, 8 >>); > /* Output: Element(0,0)=1 Element(0,1)=2 Element(1,0)=3 Element(1,1)=4 Element(2,0)=5 Element(2,1)=6 Element(3,0)=7 Element(3,1)=8 */
Массивы массивов
Массив массивов — это массив, элементы которого являются массивами и могут быть различных размеров. Многообразный массив иногда называется массивом массивов. Его элементы являются ссылочными типами и инициализированы в null . В следующих примерах показано, как объявлять и инициализировать массивы массивов, а также получать доступ к ним. Первый пример объявляется jaggedArray в одной инструкции. Каждый содержащийся массив создается в последующих инструкциях. Второй пример jaggedArray2 объявлен и инициализирован в одной инструкции. Массивы массивов и многомерные массивы можно смешивать. Последним примером jaggedArray3 является объявление и инициализация одномерного массива, содержащего три двухмерных элемента массива разных размеров.
int[][] jaggedArray = new int[3][]; jaggedArray[0] = [1, 3, 5, 7, 9]; jaggedArray[1] = [0, 2, 4, 6]; jaggedArray[2] = [11, 22]; int[][] jaggedArray2 = [ [1, 3, 5, 7, 9], [0, 2, 4, 6], [11, 22] ]; // Assign 77 to the second element ([1]) of the first array ([0]): jaggedArray2[0][1] = 77; // Assign 88 to the second element ([1]) of the third array ([2]): jaggedArray2[2][1] = 88; int[][,] jaggedArray3 = [ new int[,] < , >, new int[,] < , , >, new int[,] < , , > ]; Console.Write("", jaggedArray3[0][1, 0]); Console.WriteLine(jaggedArray3.Length);
Элементы массива должны быть инициализированы перед их использованием. Каждый из элементов является массивом. Кроме того, можно использовать инициализаторы для заполнения элементов массива значениями. При использовании инициализаторов не требуется размер массива.
В этом примере создается массив, элементы которого являются массивами. Все элементы массива имеют разный размер.
// Declare the array of two elements. int[][] arr = new int[2][]; // Initialize the elements. arr[0] = [1, 3, 5, 7, 9]; arr[1] = [2, 4, 6, 8]; // Display the array elements. for (int i = 0; i < arr.Length; i++) < System.Console.Write("Element(): ", i); for (int j = 0; j < arr[i].Length; j++) < System.Console.Write("", arr[i][j], j == (arr[i].Length - 1) ? "" : " "); > System.Console.WriteLine(); > /* Output: Element(0): 1 3 5 7 9 Element(1): 2 4 6 8 */
Неявно типизированные массивы
Можно создать неявно типизированный массив, в котором тип экземпляра массива выводится из элементов, указанных в инициализаторе массива. Правила для любой неявно типизированной переменной также применяются к неявно типизированным массивам. Дополнительные сведения см. в разделе Неявно типизированные локальные переменные.
В следующих примерах показано, как создать неявно типизированный массив:
int[] a = new[] < 1, 10, 100, 1000 >; // int[] // Accessing array Console.WriteLine("First element: " + a[0]); Console.WriteLine("Second element: " + a[1]); Console.WriteLine("Third element: " + a[2]); Console.WriteLine("Fourth element: " + a[3]); /* Outputs First element: 1 Second element: 10 Third element: 100 Fourth element: 1000 */ var b = new[] < "hello", null, "world" >; // string[] // Accessing elements of an array using 'string.Join' method Console.WriteLine(string.Join(" ", b)); /* Output hello world */ // single-dimension jagged array int[][] c = [ [1,2,3,4], [5,6,7,8] ]; // Looping through the outer array for (int k = 0; k < c.Length; k++) < // Looping through each inner array for (int j = 0; j < c[k].Length; j++) < // Accessing each element and printing it to the console Console.WriteLine($"Element at c[][] is: "); > > /* Outputs Element at c[0][0] is: 1 Element at c[0][1] is: 2 Element at c[0][2] is: 3 Element at c[0][3] is: 4 Element at c[1][0] is: 5 Element at c[1][1] is: 6 Element at c[1][2] is: 7 Element at c[1][3] is: 8 */ // jagged array of strings string[][] d = [ ["Luca", "Mads", "Luke", "Dinesh"], ["Karen", "Suma", "Frances"] ]; // Looping through the outer array int i = 0; foreach (var subArray in d) < // Looping through each inner array int j = 0; foreach (var element in subArray) < // Accessing each element and printing it to the console Console.WriteLine($"Element at d[][] is: "); j++; > i++; > /* Outputs Element at d[0][0] is: Luca Element at d[0][1] is: Mads Element at d[0][2] is: Luke Element at d[0][3] is: Dinesh Element at d[1][0] is: Karen Element at d[1][1] is: Suma Element at d[1][2] is: Frances */
В предыдущем примере обратите внимание, что с неявно типизированными массивами квадратные скобки не используются слева от инструкции инициализации. Кроме того, многомерные массивы инициализированы так new [] же, как и одномерные массивы.
При создании анонимного типа, содержащего массив, этот массив необходимо неявно типизировать в инициализаторе объекта типа. В следующем примере contacts представляет собой неявный типизированный массив анонимных типов, каждый из которых содержит массив с именем PhoneNumbers . Ключевое слово var не используется внутри инициализаторов объектов.
var contacts = new[] < new < Name = "Eugene Zabokritski", PhoneNumbers = new[] < "206-555-0108", "425-555-0001" >>, new < Name = "Hanying Feng", PhoneNumbers = new[] < "650-555-0199" >> >;
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Сколько измерений будет у следующего массива
Сколько элементов имеет следующий массив?
int[,,] numbers = new int[3, 2, 3];
Массив new int[3, 2, 3] имеет 18 элементов.
Сколько измерений (размерность) имеет следующий массив?
int[,] numbers = new int[3, 3];
Массив new int[3, 3] имеет 2 измерения, то есть это двухмерный массив.
Что будет выведено на консоль в результате выполнения следующего кода:
int[][] nums = new int[3][]; nums[0] = new int[2] < 1, 2 >; nums[1] = new int[3] < 3, 4, 5 >; nums[2] = new int[5] < 6, 7, 8, 9, 10 >; Console.WriteLine(nums[3][2]);
Консоль ничего не выведет, так как программа выбросит во время выполнения исключение System.IndexOutOfRangeException, поскольку массив имеет 3 подмассива, то, чтобы обратиться к самому последнему массиву, необходимо использовать индекс 2. А индекс 3 таким образом окажется вне границ массива.
Дан следующий массив
int[][] nums = new int[3][]; nums[0] = new int[2] < 1, 2 >; nums[1] = new int[3] < 3, 4, 5 >; nums[2] = new int[5] < 6, 7, 8, 9, 10 >;
Каким образом мы можем обратиться к числу 7 в этом массиве?
- nums[7]
- nums[2, 1]
- nums[2][1]
- nums[3]
- nums[3, 3]
- nums[3][3]
Правильный ответ nums[2][1] .