Функции для работы с массивами в Bicep

В этой статье описываются функции Bicep для работы с массивами. Лямбда-функции для работы с массивами можно найти здесь.

array

array(convertToArray)

Преобразует значение в массив.

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
convertToArray Да целое число, строка, массив или объект Значение, которое необходимо преобразовать в массив.

Возвращаемое значение

Массив объектов .

Пример

В следующем примере показано, как использовать функцию array с различными типами:

param intToConvert int = 1
param stringToConvert string = 'efgh'
param objectToConvert object = {
  a: 'b'
  c: 'd'
}

output intOutput array = array(intToConvert)
output stringOutput array = array(stringToConvert)
output objectOutput array = array(objectToConvert)

Выходные данные из предыдущего примера со значениями по умолчанию:

Имя. Тип значение
intOutput Массив [1]
stringOutput Массив ["efgh"]
objectOutput Массив [{"a": "b", "c": "d"}]

concat

concat(arg1, arg2, arg3, ...)

Объединяет несколько массивов и возвращает результирующий массив. Дополнительные сведения об объединении нескольких строк см . в сцепении.

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
arg1 Да array Первый массив для сцепки.
дополнительные аргументы No array Дополнительные массивы в последовательном порядке для сцепки.

Эта функция принимает любое число массивов и объединяет их.

Возвращаемое значение

Массив объединенных значений.

Пример

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

param firstArray array = [
  '1-1'
  '1-2'
  '1-3'
]
param secondArray array = [
  '2-1'
  '2-2'
  '2-3'
]

output return array = concat(firstArray, secondArray)

Выходные данные из предыдущего примера со значениями по умолчанию:

Имя. Тип значение
Ввод Массив ["1-1", "1-2", "1-3", "2-1", "2-2", "2-3"]

содержит

contains(container, itemToFind)

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

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
контейнер Да массив, объект или строка Значение, содержащее значение, которое необходимо найти.
itemToFind Да строка или целое число Значение, которое необходимо найти.

Возвращаемое значение

True, если элемент найден. В противном случае — False.

Пример

В следующем примере показано, как использовать функцию contains с различными типами:

param stringToTest string = 'OneTwoThree'
param objectToTest object = {
  one: 'a'
  two: 'b'
  three: 'c'
}
param arrayToTest array = [
  'one'
  'two'
  'three'
]

output stringTrue bool = contains(stringToTest, 'e')
output stringFalse bool = contains(stringToTest, 'z')
output objectTrue bool = contains(objectToTest, 'one')
output objectFalse bool = contains(objectToTest, 'a')
output arrayTrue bool = contains(arrayToTest, 'three')
output arrayFalse bool = contains(arrayToTest, 'four')

Выходные данные из предыдущего примера со значениями по умолчанию:

Имя. Тип значение
stringTrue Bool Истина
stringFalse Bool False
objectTrue Bool Истина
objectFalse Bool False
arrayTrue Bool Истина
arrayFalse Bool False

empty

empty(itemToTest)

Определяет, являются ли пустыми массив, объект или строка.

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
itemToTest Да массив, объект или строка Значение, которое необходимо проверить на наличие содержимого.

Возвращаемое значение

Возвращает результат True, если значение пустое. В противном случае — False.

Пример

В следующем примере проверяется, являются ли пустыми массив, объект и строка.

param testArray array = []
param testObject object = {}
param testString string = ''

output arrayEmpty bool = empty(testArray)
output objectEmpty bool = empty(testObject)
output stringEmpty bool = empty(testString)

Выходные данные из предыдущего примера со значениями по умолчанию:

Имя. Тип значение
arrayEmpty Bool Истина
objectEmpty Bool Истина
stringEmpty Bool Истина

Примеры краткого руководства

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

@description('Array containing DNS Servers')
param dnsServers array = []

...

resource vnet 'Microsoft.Network/virtualNetworks@2021-02-01' = {
  name: vnetName
  location: location
  properties: {
    addressSpace: {
      addressPrefixes: vnetAddressSpace
    }
    dhcpOptions: empty(dnsServers) ? null : {
      dnsServers: dnsServers
    }
    ...
  }
}

В условном выражении пустая функция используется для проверка, является ли массив dnsServers пустым массивом.

первая

first(arg1)

Возвращает первый элемент массива или первый знак строки.

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
arg1 Да массив или строка Значение, из которого необходимо извлечь первый элемент или знак.

Возвращаемое значение

Тип (строка, целое число, массив или объект) первого элемента в массиве или строка первого знака.

Пример

В следующем примере показано, как использовать функцию first с массивом и строкой:

param arrayToTest array = [
  'one'
  'two'
  'three'
]

output arrayOutput string = first(arrayToTest)
output stringOutput string = first('One Two Three')

Выходные данные из предыдущего примера со значениями по умолчанию:

Имя. Тип значение
arrayOutput Строка один
stringOutput Строка O

flatten

flatten(arrayToFlatten)

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

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
arrayToFlattern Да array Массив субаррей для выравнивания.

Возвращаемое значение

Массив

Пример

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

param arrayToTest array = [
  ['one', 'two']
  ['three']
  ['four', 'five']
]
output arrayOutput array = flatten(arrayToTest)

Выходные данные из предыдущего примера со значениями по умолчанию:

Имя. Тип значение
arrayOutput array ['one', 'two', 'three', 'four', 'five']

indexOf

indexOf(arrayToSearch, itemToFind)

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

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
arrayToSearch Да array Массив, используемый для поиска индекса искомого элемента.
itemToFind Да целое число, строка, массив или объект Элемент, который нужно найти в массиве.

Возвращаемое значение

Целое число, представляющее первый индекс у элемента в массиве. Значения индекса начинаются с нуля. Если элемент не найден, то возвращается значение –1.

Примеры

В следующем примере показано, как использовать функции indexOf и lastIndexOf:

var names = [
  'one'
  'two'
  'three'
]

var numbers = [
  4
  5
  6
]

var collection = [
  names
  numbers
]

var duplicates = [
  1
  2
  3
  1
]

output index1 int = lastIndexOf(names, 'two')
output index2 int = indexOf(names, 'one')
output notFoundIndex1 int = lastIndexOf(names, 'Three')

output index3 int = lastIndexOf(numbers, 4)
output index4 int = indexOf(numbers, 6)
output notFoundIndex2 int = lastIndexOf(numbers, '5')

output index5 int = indexOf(collection, numbers)

output index6 int = indexOf(duplicates, 1)
output index7 int = lastIndexOf(duplicates, 1)

Выходные данные из предыдущего примера:

Имя. Тип значение
index1 INT 1
index2 INT 0
index3 INT 0
index4 INT 2
index5 INT 1
index6 INT 0
index7 INT 3
notFoundIndex1 INT -1
notFoundIndex2 INT -1

intersection

intersection(arg1, arg2, arg3, ...)

Возвращает из параметров один массив или объект с общими элементами.

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
arg1 Да массив или объект Первое значение для поиска общих элементов.
arg2 Да массив или объект Второе значение для поиска общих элементов.
дополнительные аргументы No массив или объект Дополнительные значения для поиска общих элементов.

Возвращаемое значение

Массив или объект с общими элементами. Порядок элементов определяется первым параметром массива.

Пример

В следующем примере показано, как использовать функцию intersection с массивами и объектами:

param firstObject object = {
  one: 'a'
  two: 'b'
  three: 'c'
}

param secondObject object = {
  one: 'a'
  two: 'z'
  three: 'c'
}

param firstArray array = [
  'one'
  'two'
  'three'
]

param secondArray array = [
  'two'
  'three'
]

output objectOutput object = intersection(firstObject, secondObject)
output arrayOutput array = intersection(firstArray, secondArray)

Выходные данные из предыдущего примера со значениями по умолчанию:

Имя. Тип значение
objectOutput Object {"one": "a", "three": "c"}
arrayOutput Массив ["two", "three"]

Порядок пересекающихся элементов определяется первым параметром массива. В следующем примере показано определение порядка возвращаемых элементов в зависимости от первого массива.

var array1 = [
  1
  2
  3
  4
]

var array2 = [
  3
  2
  1
]

var array3 = [
  4
  1
  3
  2
]

output commonUp array = intersection(array1, array2, array3)
output commonDown array = intersection(array2, array3, array1)

Выходные данные из предыдущего примера:

Имя. Тип значение
commonUp array [1, 2, 3]
commonDown array [3, 2, 1]

последняя

last(arg1)

Возвращает последний элемент массива или последний знак строки.

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
arg1 Да массив или строка Значение, из которого необходимо извлечь последний элемент или знак.

Возвращаемое значение

Тип (строка, целое число, массив или объект) последнего элемента в массиве или последнего символа в строке.

Пример

В следующем примере показано, как использовать функцию last с массивом и строкой:

param arrayToTest array = [
  'one'
  'two'
  'three'
]

output arrayOutput string = last(arrayToTest)
output stringOutput string = last('One Two three')

Выходные данные из предыдущего примера со значениями по умолчанию:

Имя. Тип значение
arrayOutput Строка три
stringOutput Строка e

lastIndexOf

lastIndexOf(arrayToSearch, itemToFind)

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

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
arrayToSearch Да array Массив, используемый для поиска индекса искомого элемента.
itemToFind Да целое число, строка, массив или объект Элемент, который нужно найти в массиве.

Возвращаемое значение

Целое число, представляющее последний индекс у элемента в массиве. Значения индекса начинаются с нуля. Если элемент не найден, то возвращается значение –1.

Примеры

В следующем примере показано, как использовать функции indexOf и lastIndexOf:

var names = [
  'one'
  'two'
  'three'
]

var numbers = [
  4
  5
  6
]

var collection = [
  names
  numbers
]

var duplicates = [
  1
  2
  3
  1
]

output index1 int = lastIndexOf(names, 'two')
output index2 int = indexOf(names, 'one')
output notFoundIndex1 int = lastIndexOf(names, 'Three')

output index3 int = lastIndexOf(numbers, 4)
output index4 int = indexOf(numbers, 6)
output notFoundIndex2 int = lastIndexOf(numbers, '5')

output index5 int = indexOf(collection, numbers)

output index6 int = indexOf(duplicates, 1)
output index7 int = lastIndexOf(duplicates, 1)

Выходные данные из предыдущего примера:

Имя. Тип значение
index1 INT 1
index2 INT 0
index3 INT 0
index4 INT 2
index5 INT 1
index6 INT 0
index7 INT 3
notFoundIndex1 INT -1
notFoundIndex2 INT -1

length

length(arg1)

Возвращает количество элементов в массиве, символов в строке или свойств корневого уровня в объекте.

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
arg1 Да массив, строка или объект Массив, используемый для получения числа элементов, строка, используемая для получения числа символов, или объект, используемый для получения числа свойств корневого уровня.

Возвращаемое значение

Целое число.

Пример

В следующем примере показано, как использовать функцию length с массивом и строкой:

param arrayToTest array = [
  'one'
  'two'
  'three'
]
param stringToTest string = 'One Two Three'
param objectToTest object = {
  propA: 'one'
  propB: 'two'
  propC: 'three'
  propD: {
    'propD-1': 'sub'
    'propD-2': 'sub'
  }
}

output arrayLength int = length(arrayToTest)
output stringLength int = length(stringToTest)
output objectLength int = length(objectToTest)

Выходные данные из предыдущего примера со значениями по умолчанию:

Имя. Тип значение
arrayLength Int 3
stringLength Int 13
objectLength Int 4

Примеры краткого руководства

Следующий пример извлекается из шаблона быстрого запуска, развертывание Управление API во внешней виртуальной сети с общедоступным IP-адресом:

@description('Numbers for availability zones, for example, 1,2,3.')
param availabilityZones array = [
  '1'
  '2'
]

resource exampleApim 'Microsoft.ApiManagement/service@2021-08-01' = {
  name: apiManagementName
  location: location
  sku: {
    name: sku
    capacity: skuCount
  }
  zones: ((length(availabilityZones) == 0) ? null : availabilityZones)
  ...
}

В условном выраженииlength функция проверка длину массива availabilityZones.

Дополнительные примеры можно найти в следующих файлах Bicep краткого руководства.

макс.

max(arg1)

Возвращает максимальное значение из массива целых чисел или разделенный запятыми список целых чисел.

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
arg1 Да массив целых чисел или разделенный запятыми список целых чисел Коллекция, для которой необходимо получить максимальное значение.

Возвращаемое значение

Целое число, представляющее максимальное значение.

Пример

В следующем примере показано, как использовать функцию max с массивом и списком целых чисел:

param arrayToTest array = [
  0
  3
  2
  5
  4
]

output arrayOutput int = max(arrayToTest)
output intOutput int = max(0,3,2,5,4)

Выходные данные из предыдущего примера со значениями по умолчанию:

Имя. Тип значение
arrayOutput Int 5
intOutput Int 5

мин

min(arg1)

Возвращает минимальное значение из массива целых чисел или разделенный запятыми список целых чисел.

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
arg1 Да массив целых чисел или разделенный запятыми список целых чисел Коллекция, для которой необходимо получить минимальное значение.

Возвращаемое значение

Целое число, представляющее минимальное значение.

Пример

В следующем примере показано, как использовать функцию min с массивом и списком целых чисел:

param arrayToTest array = [
  0
  3
  2
  5
  4
]

output arrayOutput int = min(arrayToTest)
output intOutput int = min(0,3,2,5,4)

Выходные данные из предыдущего примера со значениями по умолчанию:

Имя. Тип значение
arrayOutput Int 0
intOutput Int 0

range

range(startIndex, count)

Создает массив целых чисел, используя начальное целое число и количество элементов.

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
startIndex Да INT Первое целое число в массиве. Сумма значений startIndex и count не должна превышать 2147483647.
count Да INT Количество целых чисел в массиве. Значение должно быть неотрицательным целым числом не больше 10000.

Возвращаемое значение

Массив целых чисел.

Пример

В следующем примере показано, как использовать функцию range:

param startingInt int = 5
param numberOfElements int = 3

output rangeOutput array = range(startingInt, numberOfElements)

Выходные данные из предыдущего примера со значениями по умолчанию:

Имя. Тип значение
rangeOutput Массив [5, 6, 7]

Примеры краткого руководства

Следующий пример извлекается из шаблона быстрого запуска: две виртуальные машины в виртуальной сети — внутренние правила балансировки нагрузки и подсистемы балансировки нагрузки:

...
var numberOfInstances = 2

resource networkInterface 'Microsoft.Network/networkInterfaces@2021-05-01' = [for i in range(0, numberOfInstances): {
  name: '${networkInterfaceName}${i}'
  location: location
  properties: {
    ...
  }
}]

resource vm 'Microsoft.Compute/virtualMachines@2021-11-01' = [for i in range(0, numberOfInstances): {
  name: '${vmNamePrefix}${i}'
  location: location
  properties: {
    ...
  }
}]

Файл Bicep создает два ресурса networkInterface и два виртуальныхMachine.

Дополнительные примеры можно найти в следующих файлах Bicep краткого руководства.

skip

skip(originalValue, numberToSkip)

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

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
originalValue Да массив или строка Массив или строка, используемые для пропуска.
numberToSkip Да INT Число элементов или знаков, которые необходимо пропустить. Если это значение меньше или равно 0, то возвращаются все элементы или знаки в значении. Если это значение превышает длину массива или строки, возвращается пустой массив или строка.

Возвращаемое значение

Массив или строка.

Пример

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

param testArray array = [
  'one'
  'two'
  'three'
]
param elementsToSkip int = 2
param testString string = 'one two three'
param charactersToSkip int = 4

output arrayOutput array = skip(testArray, elementsToSkip)
output stringOutput string = skip(testString, charactersToSkip)

Выходные данные из предыдущего примера со значениями по умолчанию:

Имя. Тип значение
arrayOutput Массив ["three"]
stringOutput Строка two three

take

take(originalValue, numberToTake)

Возвращает массив, содержащий указанное число элементов, считая от начала массива, или строку, содержащую указанное число знаков, считая от начала строки.

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
originalValue Да массив или строка Массив или строка, из которых берутся элементы.
numberToTake Да INT Число элементов или знаков, которые необходимо взять. Если это значение меньше или равно 0, то возвращается пустой массив или строка. Если это значение превышает длину заданного массива или строки, возвращаются все элементы в массиве или строке.

Возвращаемое значение

Массив или строка.

Пример

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

param testArray array = [
  'one'
  'two'
  'three'
]
param elementsToTake int = 2
param testString string = 'one two three'
param charactersToTake int = 2

output arrayOutput array = take(testArray, elementsToTake)
output stringOutput string = take(testString, charactersToTake)

Выходные данные из предыдущего примера со значениями по умолчанию:

Имя. Тип значение
arrayOutput Массив ["one", "two"]
stringOutput Строка on

union

union(arg1, arg2, arg3, ...)

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

Пространство имен: sys.

Параметры

Параметр Обязательное поле Type Описание
arg1 Да массив или объект Первое значение для объединения элементов.
arg2 Да массив или объект Второе значение для объединения элементов.
дополнительные аргументы No массив или объект Дополнительные значения для объединения элементов.

Возвращаемое значение

Массив или объект.

Замечания

Функция объединения использует последовательность параметров, чтобы определить порядок и значения в результате.

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

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

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

Пример

В следующем примере показано, как использовать функцию union с массивами и объектами:

param firstObject object = {
  one: 'a'
  two: 'b'
  three: 'c1'
}

param secondObject object = {
  three: 'c2'
  four: 'd'
  five: 'e'
}

param firstArray array = [
  'one'
  'two'
  'three'
]

param secondArray array = [
  'three'
  'four'
  'two'
]

output objectOutput object = union(firstObject, secondObject)
output arrayOutput array = union(firstArray, secondArray)

Выходные данные из предыдущего примера со значениями по умолчанию:

Имя. Тип значение
objectOutput Object {"one": "a", "two": "b", "three": "c2", "four": "d", "five": "e"}
arrayOutput Массив ["one", "two", "three", "four"]

В следующем примере показана возможность глубокого слияния:

var firstObject = {
  property: {
    one: 'a'
    two: 'b'
    three: 'c1'
  }
  nestedArray: [
    1
    2
  ]
}
var secondObject = {
  property: {
    three: 'c2'
    four: 'd'
    five: 'e'
  }
  nestedArray: [
    3
    4
  ]
}
var firstArray = [
  [
    'one'
    'two'
  ]
  [
    'three'
  ]
]
var secondArray = [
  [
    'three'
  ]
  [
    'four'
    'two'
  ]
]

output objectOutput object = union(firstObject, secondObject)
output arrayOutput array = union(firstArray, secondArray)

Выходные данные из предыдущего примера:

Имя. Тип значение
objectOutput Object {"property":{"one":"a","two":"b","three":"c2","four":"d","пять":"e"},"nestedArray":[3,4]}
arrayOutput Массив [["один","два"],["три"],["четыре","два"]]

Если вложенные массивы были объединены, значение objectOutput.nestedArray будет равно [1, 2, 3, 4], а значение arrayOutput будет [["один", "два", "три"], ["три", "четыре", "два"]].

Следующие шаги

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