Массивы vb: Массивы — Visual Basic | Microsoft Learn

Массивы параметров — Visual Basic





Twitter




LinkedIn




Facebook




Адрес электронной почты










  • Статья



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

Объявление ParamArray

Ключевое слово ParamArray используется для обозначения массива параметров в списке параметров. Применяются следующие правила.

  • Процедура может определить только один массив параметров, и это должен быть последний параметр в определении процедуры.

  • Массив параметров должен передаваться по значению. Рекомендуется явно включить ключевое слово ByVal в определение процедуры.

  • Массив параметров автоматически является необязательным. Значение по умолчанию — пустой одномерный массив типа элемента массива параметров.

  • Все параметры, предшествующие массиву параметров, должны быть обязательными. Массив параметров должен быть единственным необязательным параметром.

Вызов ParamArray

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

  • Ничего, то есть аргумент ParamArray можно опустить. В этом случае в процедуру передается пустой массив. При явной передаче ключевого слова Nothing в процедуру передается массив NULL, что может привести к возникновению исключения NullReferenceException, если вызываемая процедура не проверяет наличие этого условия.

  • Список произвольного количества аргументов, разделенных запятыми. Тип данных каждого аргумента должен быть неявно преобразован в ParamArray тип элемента.

  • Массив с тем же типом элемента, что и тип элемента массива параметров.

Во всех случаях код в процедуре обрабатывает массив параметров как одномерный массив с элементами того же типа данных, что и ParamArray тип данных.

Важно!

Всякий раз, когда вы работаете с массивом, который может быть бесконечно большим, существует риск перерасхода некоторой внутренней емкости приложения. Если вы принимаете массив параметров, следует проверить размер массива, переданного ему вызывающим кодом. Выполните соответствующие действия, если он слишком велик для приложения. Дополнительные сведения см. в статье Arrays (C++/CLI and C++/CX) (Массивы (C++/CLI и C++/CX)).

Пример

В следующем примере определяется и вызывается функция calcSum. Модификатор ParamArray для параметра args позволяет функции принимать переменное число аргументов.

Module Module1
    Sub Main()
        ' In the following function call, CalcSum's local variables
        ' are assigned the following values: args(0) = 4, args(1) = 3,
        ' and so on. The displayed sum is 10.
        Dim returnedValue As Double = CalcSum(4, 3, 2, 1)
        Console.WriteLine("Sum: " & returnedValue)
        ' Parameter args accepts zero or more arguments. The sum
        ' displayed by the following statements is 0.
        returnedValue = CalcSum()
        Console. WriteLine("Sum: " & returnedValue)
    End Sub
    Public Function CalcSum(ByVal ParamArray args() As Double) As Double
        CalcSum = 0
        If args.Length <= 0 Then Exit Function
        For i As Integer = 0 To UBound(args, 1)
            CalcSum += args(i)
        Next i
    End Function
End Module

В следующем примере определяется процедура с массивом параметров и выводится значение всех элементов массива, переданных в массив параметров.

Sub studentScores(ByVal name As String, ByVal ParamArray scores() As String)
    Debug.WriteLine("Scores for " & name & ":" & vbCrLf)
    ' Use UBound to determine largest subscript of the array.
    For i As Integer = 0 To UBound(scores, 1)
        Debug.WriteLine("Score " & i & ": " & scores(i))
    Next i
End Sub
Call studentScores("Anne", "10", "26", "32", "15", "22", "24", "16")
Call studentScores("Mary", "High", "Low", "Average", "High")
Dim JohnScores() As String = {"35", "Absent", "21", "30"}
Call studentScores("John", JohnScores)

См.

также раздел

  • UBound
  • Процедуры
  • Параметры и аргументы процедуры
  • Передача аргументов по значению и по ссылке
  • Передача аргументов по позиции и по имени
  • Необязательные параметры
  • Перегрузка процедур
  • Массивы
  • Необязательно






Массивы в Visual Basic.NET

Последнее обновление: 30.10.2015

Массив представляет собой набор данных одного типа. Например, объявим массив элементов типа Integer:


Dim nums(5) As Integer
nums(0) = 0
nums(1) = 1
nums(2) = 2
nums(3) = 3
Console.WriteLine(nums(3))

Здесь мы объявили массив из 6 элементов типа Integer. По умолчанию всем шести элементам в массиве присваивается 0.
Затем первым четырем элементам массива мы присваиваем некоторые значения. Обратите внимание, что индексация в массиве начинается с нуля.
При этом мы не можем выйти за рамки установленной длины массива в 6 элементов. А следующий код вызовет исключение ArrayIndexOutOfRange,
поскольку восьмого элемента в массиве не существует, в нем определено только 6 элементов:


Dim nums(5) As Integer
nums(7) = 7

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


Dim nums() As Integer

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


Dim nums() As Integer
nums = New Integer(5) {}
nums(0) = 0
nums(1) = 1
nums(2) = 2
nums(3) = 3

В данном примере мы c помощью ключевого слова New указываем, что хотим создать новый объект. Также указываем размер массива. А фигурные скобки служат для
инициализации массива. Однако нам необязательно присваивать все значения массива после объявления. Мы можем все сделать уже при объявлении массива:


Dim nums2 As Integer() = New Integer(5) {0, 1, 2, 3, 4, 5}

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


'Не указываем размер массива
Dim nums1 As Integer() = New Integer() {0, 1, 2, 3, 4, 5}
'Сокращенный синтаксис инициализации
Dim nums2 As Integer() = {0, 1, 2, 3, 4, 5}

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


Dim nums = {0, 1, 2, 3, 4, 5}

Кроме размера массив характеризуется таким понятием как размерность (dimension). В предыдущих примерах мы использовали одномерные массивы.
Но массивы бывают и многомерными. Например:


'Одномерный массив
Dim nums1 As Integer() = {0, 1, 2, 3, 4, 5}
'Двухмерный массив
Dim nums2 As Integer(,) = {{0, 1, 2}, {3, 4, 5}}
Console.WriteLine(nums2(1, 1))

Здесь мы создали двухмерный массив, который можно представить в виде таблицы:

Одномерный массив nums1

0

1

2

3

4

5

Двухмерный массив nums2

0

1

2

3

4

5

Изменение размера массива

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


Dim nums1 As Integer() = {0, 1, 2, 3, 4, 5}
ReDim nums1(8)

ReDim пересоздает массив с новым размером. Чтобы сохранить все прежние элементы, нам надо также использовать ключевое слово Preserve.


Dim nums1 As Integer() = {0, 1, 2, 3, 4, 5}
ReDim Preserve nums1(8)

Некоторые методы и свойства массивов
  • Свойство Length позволяет получить количество элементов массива

  • Свойство Rank позволяет получить размерность массива

  • Метод Reverse изменяет порядок следования элементов массива на обратный

  • Метод Sort сортирует элементы массива

Примеры использования:


Dim nums1 As Integer() = {8, 1, 5, 3, 4, 2}
Dim lenght As Integer = nums1. Length()
Console.WriteLine("количество элементов: {0}", lenght)
Dim rank As Integer = nums1.Rank()
Console.WriteLine("размерность массива: {0}", rank)
nums1.Reverse()
Array.Sort(nums1)
Console.WriteLine(nums1(1))

НазадСодержаниеВперед

Практическое руководство. Инициализация переменной массива — Visual Basic

Редактировать

Твиттер

LinkedIn

Фейсбук

Электронная почта

  • Статья

Вы инициализируете переменную массива, включив литерал массива в предложение New и указав начальные значения массива. Вы можете либо указать тип, либо разрешить его вывод из значений литерала массива. Дополнительные сведения о том, как выводится тип, см. в разделе «Заполнение массива начальными значениями» в разделе Массивы.

Чтобы инициализировать переменную массива с помощью литерала массива

  • Либо в предложении New , либо при присвоении значения массива укажите значения элементов внутри фигурных скобок ( {} ). В следующем примере показано несколько способов объявления, создания и инициализации переменной, содержащей массив с элементами типа Char .

     ' Следующие пять строк кода создают один и тот же массив.
    ' Предпочтительный синтаксис находится в строках с chars1 и chars2.
    Dim chars1 = {"%"c, "&"c, "@"c}
    Dim chars2 As Char() = {"%"c, "&"c, "@"c}
    Dim chars3() As Char = {"%"c, "&"c, "@"c}
    Dim chars4 As Char() = New Char(2) {"%"c, "&"c, "@"c}
    Dim chars5() As Char = New Char(2) {"%"c, "&"c, "@"c}
     

    После выполнения каждого оператора создаваемый массив имеет длину 3 с элементами с индексами от 0 до 2, содержащими начальные значения. Если вы указываете и верхнюю границу, и значения, вы должны включить значение для каждого элемента от индекса 0 до верхней границы.

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

Чтобы инициализировать переменную многомерного массива с помощью литералов массива

  • Вложите значения в фигурные скобки ( {} ) в фигурные скобки. Убедитесь, что литералы вложенных массивов выводятся как массивы одного типа и длины. В следующем примере кода показано несколько примеров инициализации многомерного массива.

     Тусклые числа = {{1, 2}, {3, 4}, {5, 6}}
    Dim customerData = {{"City Power & Light", "http://www.cpandl.com/"},
                        {"Wideworld Importers", "http://wideworldimporters.com"},
                        {"Издательство Люцерн", "http://www. lucernepublishing.com"}}
    ' Вы можете вкладывать литералы массивов для создания массивов, содержащих более двух
    ' размеры.
    Dim twoSidedCube = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}
     
  • Вы можете явно указать границы массива или не указывать их, чтобы компилятор определял границы массива на основе значений литерала массива. Если вы указываете как верхние границы, так и значения, вы должны включить значение для каждого элемента от индекса 0 до верхней границы в каждом измерении. В следующем примере показано несколько способов объявления, создания и инициализации переменной, содержащей двумерный массив с элементами типа Short

    .

     ' Следующие пять строк кода создают один и тот же массив.
    ' Предпочтительный синтаксис находится в строках с score1 и scores2.
    Тусклые баллы1 = {{10S, 10S, 10S}, {10S, 10S, 10S}}
    Dim scores2 As Short(,) = {{10, 10, 10}, {10, 10, 10}}
    Dim scores3(,) As Short = {{10, 10, 10}, {10, 10, 10}}
    Dim scores4 As Short(,) = New Short(1, 2) {{10, 10, 10}, {10, 10, 10}}
    Dim scores5(,) As Short = New Short(1, 2) {{10, 10, 10}, {10, 10, 10}}
     

    После выполнения каждого оператора созданный массив содержит шесть инициализированных элементов с индексами (0,0) , (0,1) , (0,2) , (1,0) , (1,1) и (1,2) . Каждая ячейка массива содержит значение 10 .

  • В следующем примере выполняется итерация по многомерному массиву. В консольном приложении Windows, написанном на Visual Basic, вставьте код внутри метода Sub Main() . Последние комментарии показывают вывод.

     Диммеры = {{1, 2}, {3, 4}, {5, 6}}
    'Пройтись по массиву.
    Для index0 = 0 Для чисел.GetUpperBound(0)
        Для index1 = 0 К числам.GetUpperBound(1)
            Debug.Write (числа (index0, index1).ToString и "")
        Следующий
        Отладка.WriteLine("")
    Следующий
    ' Выход
    1 2
    3 4
    5 6
     

Для инициализации переменной зубчатого массива с помощью литералов массива

  • Вложите значения объекта в фигурные скобки ( {} ). Хотя вы также можете вкладывать литералы массива, которые задают массивы разной длины, в случае зубчатого массива убедитесь, что вложенные литералы массива заключены в круглые скобки ( () ). Круглые скобки принудительно оценивают литералы вложенного массива, и результирующие массивы используются в качестве начальных значений зубчатого массива. В следующем примере кода показаны два примера инициализации зубчатого массива.

     ' Создать зубчатый массив массивов разной длины.
    Dim jaggedNumbers = {({1, 2, 3}), ({4, 5}), ({6}), ({7})}
    ' Создаем зубчатый массив байтовых массивов.
    Затемненные изображения = {Новый байт() {}, Новый байт() {}, Новый байт() {}}
     
  • В следующем примере выполняется перебор зубчатого массива. В консольном приложении Windows, написанном на Visual Basic, вставьте код внутри метода Sub Main() . Последние комментарии в коде показывают вывод.

     ' Создать зубчатый массив массивов разной длины.
    Dim jaggedNumbers = {({1, 2, 3}), ({4, 5}), ({6}), ({7})}
    Для indexA = 0 To jaggedNumbers.Length - 1
        Для indexB = 0 To jaggedNumbers(indexA).Length - 1
            Debug. Write(jaggedNumbers(indexA)(indexB) & "")
        Следующий
        Отладка.WriteLine("")
    Следующий
    ' Выход:
    1 2 3
    4 5
    6
    7
     

См. также

  • Массивы
  • Устранение неполадок с массивами

Обратная связь

Просмотреть все отзывы о странице

Размеры массива — Visual Basic

Редактировать

Твиттер

LinkedIn

Фейсбук

Электронная почта

  • Статья

Измерение — это направление, в котором вы можете изменять спецификацию элементов массива. Массив, содержащий общую сумму продаж за каждый день месяца, имеет одно измерение (день месяца). Массив, содержащий общую сумму продаж по отделам на каждый день месяца, имеет два измерения (номер отдела и день месяца). Число измерений массива называется его 9.0135 ранг .

Примечание

Свойство Rank можно использовать для определения количества измерений в массиве.

Работа с измерениями

Вы указываете элемент массива, указывая индекс или индекс для каждого из его измерений. Элементы являются смежными по каждому измерению от индекса 0 до самого высокого индекса для этого измерения.

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

Одно измерение

Многие массивы имеют только одно измерение, например количество людей каждого возраста. Единственным требованием для указания элемента является возраст, для которого этот элемент содержит счетчик. Следовательно, такой массив использует только один индекс. В следующем примере объявляется переменная для хранения одномерного массива 90 135 90 136 счетчиков возраста для возрастов от 0 до 120.

 Dim ageCounts(120) As UInteger
 

Два измерения

Некоторые массивы имеют два измерения, например количество офисов на каждом этаже каждого здания в кампусе. Спецификация элемента требует как номер здания, так и этаж, и каждый элемент содержит количество для этой комбинации здания и этажа. Следовательно, такой массив использует два индекса. В следующем примере объявляется переменная для хранения двумерного массива количества офисов для зданий с 0 по 40 и этажей с 0 по 5.

 Dim officeCounts(40, 5) As Byte
 

Двумерный массив также называется прямоугольным массивом .

Три измерения

Некоторые массивы имеют три измерения, например значения в трехмерном пространстве. Такой массив использует три индекса, которые в данном случае представляют координаты x, y и z физического пространства. В следующем примере объявляется переменная для хранения трехмерного массива 90 135 90 136 температур воздуха в различных точках трехмерного объема.

 Тусклый воздухТемпературы(99, 99, 24) Как сингл
 

Более трех измерений

Хотя массив может иметь до 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 или Новый пункт . Например, вы можете вызвать метод CreateInstance, или другой компонент может передать вашему коду массив, созданный таким образом.