Compartir vía


Funciones de matriz para Bicep

En este artículo se describen las funciones de Bicep para trabajar con matrices. Las funciones lambda para trabajar con matrices se pueden encontrar aquí.

array

array(convertToArray)

Convierte el valor en una matriz.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
convertToArray int, string, array u object Valor que se convierte en matriz.

Valor devuelto

Matriz .

Ejemplo

En el ejemplo siguiente se muestra cómo utilizar la función de matriz con diferentes tipos.

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)

La salida del ejemplo anterior con el valor predeterminado es:

Nombre Tipo Value
intOutput Array [1]
stringOutput Array ["efgh"]
objectOutput Array [{"a": "b", "c": "d"}]

concat

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

Combina varias matrices y devuelve la matriz concatenada. Para obtener más información sobre cómo combinar varias cadenas, consulte concat.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
arg1 array La primera matriz para la concatenación.
más argumentos No array Más matrices en orden secuencial para la concatenación.

Esta función toma cualquier número de matrices y las combina.

Valor devuelto

Una cadena de valores concatenados.

Ejemplo

En el ejemplo siguiente se muestra cómo combinar dos matrices.

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

output return array = concat(firstArray, secondArray)

La salida del ejemplo anterior con el valor predeterminado es:

Nombre Tipo Value
return Array ["1-1", "1-2", "1-3", "2-1", "2-2", "2-3"]

contains

contains(container, itemToFind)

Comprueba si una matriz contiene un valor, un objeto contiene una clave o una cadena contiene una subcadena. La comparación de cadena distingue mayúsculas de minúsculas. Pero, cuando se prueba si un objeto contiene una clave, la comparación no distingue mayúsculas de minúsculas.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
contenedor matriz, objeto o cadena El valor que contiene el valor para buscar.
itemToFind cadena o entero El valor para buscar.

Valor devuelto

True si el elemento se encuentra; en caso contrario, False.

Ejemplo

En el ejemplo siguiente se muestra cómo utilizar contains con diferentes tipos:

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')

La salida del ejemplo anterior con el valor predeterminado es:

Nombre Tipo Value
stringTrue Bool True
stringFalse Bool False
objectTrue Bool True
objectFalse Bool False
arrayTrue Bool True
arrayFalse Bool False

empty

empty(itemToTest)

Determina si una matriz, un objeto o una cadena están vacíos.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
itemToTest matriz, objeto o cadena El valor para comprobar si está vacío.

Valor devuelto

Devuelve True si el valor está vacío; en caso contrario, False.

Ejemplo

En el ejemplo siguiente se comprueba si una matriz, un objeto y una cadena están vacíos.

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

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

La salida del ejemplo anterior con el valor predeterminado es:

Nombre Tipo Value
arrayEmpty Bool True
objectEmpty Bool True
stringEmpty Bool True

Ejemplos de inicio rápido

El ejemplo siguiente se extrae de una plantilla de inicio rápido, Virtual Network con la configuración de registros de diagnóstico:

@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
    }
    ...
  }
}

En la expresión condicional, la función vacía se usa para comprobar si la matriz dnsServers es una matriz vacía.

first

first(arg1)

Devuelve el primer elemento de la matriz o el primer carácter de la cadena.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
arg1 matriz o cadena El valor para recuperar el primer elemento o carácter.

Valor devuelto

El tipo (cadena, entero, matriz u objeto) del primer elemento en una matriz o el primer carácter de una cadena.

Ejemplo

En el ejemplo siguiente se muestra cómo utilizar la primera función con una matriz y una cadena.

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

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

La salida del ejemplo anterior con el valor predeterminado es:

Nombre Tipo Value
arrayOutput String one
stringOutput String O

quitar información de estructura jerárquica

flatten(arrayToFlatten)

Toma una matriz de matrices y devuelve una matriz de elementos submatriz, en el orden original. Las submatrices solo se aplanan una vez, no de forma recurrente.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
arrayToFlattern array Matriz de submatrices que se va aplanar.

Valor devuelto

Array

Ejemplo

En el ejemplo siguiente se muestra cómo usar la función flatten.

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

La salida del ejemplo anterior con el valor predeterminado es:

Nombre Tipo Value
arrayOutput array ['one', 'two', 'three', 'four', 'five']

indexOf

indexOf(arrayToSearch, itemToFind)

Devuelve un entero para el índice de la primera aparición de un elemento en una matriz. La comparación distingue mayúsculas de minúsculas para las cadenas.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
arrayToSearch array Matriz que se va a usar para buscar el índice del elemento buscado.
itemToFind int, string, array u object Elemento que se va a buscar en la matriz.

Valor devuelto

Entero que representa el primer índice del elemento en la matriz. El índice es de base cero. Si no se encuentra el elemento, se devuelve -1.

Ejemplos

En el ejemplo siguiente se muestra cómo utilizar las funciones indexOf y 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)

El resultado del ejemplo anterior es:

Nombre Tipo Valor
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

intersección

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

Devuelve una única matriz u objeto con los elementos comunes de los parámetros.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
arg1 matriz u objeto El primer valor que se utilizará para buscar elementos comunes.
arg2 matriz u objeto El segundo valor que se utilizará para buscar elementos comunes.
más argumentos No matriz u objeto Más valores que se utilizarán para buscar elementos comunes.

Valor devuelto

Una matriz o un objeto con los elementos comunes. El orden de los elementos viene determinado por el primer parámetro de matriz.

Ejemplo

En el ejemplo siguiente se muestra cómo utilizar la intersección con matrices y objetos:

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)

La salida del ejemplo anterior con el valor predeterminado es:

Nombre Tipo Value
objectOutput Object {"one": "a", "three": "c"}
arrayOutput Array ["two", "three"]

El primer parámetro de matriz determina el orden de los elementos intersectados. En el ejemplo siguiente se muestra cómo el orden de los elementos devueltos se basa en qué matriz es la primera.

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)

El resultado del ejemplo anterior es:

Nombre Tipo Valor
commonUp array [1, 2, 3]
commonDown array [3, 2, 1]

last

last(arg1)

Devuelve el último elemento de la matriz o el último carácter de la cadena.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
arg1 matriz o cadena El valor para recuperar el último elemento o carácter.

Valor devuelto

El tipo (cadena, entero, matriz u objeto) del último elemento de una matriz o el último carácter de una cadena.

Ejemplo

En el ejemplo siguiente se muestra cómo utilizar la última función con una matriz y una cadena.

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

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

La salida del ejemplo anterior con el valor predeterminado es:

Nombre Tipo Value
arrayOutput String three
stringOutput String e

lastIndexOf

lastIndexOf(arrayToSearch, itemToFind)

Devuelve un entero para el índice de la última aparición de un elemento en una matriz. La comparación distingue mayúsculas de minúsculas para las cadenas.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
arrayToSearch array Matriz que se va a usar para buscar el índice del elemento buscado.
itemToFind int, string, array u object Elemento que se va a buscar en la matriz.

Valor devuelto

Entero que representa el último índice del elemento en la matriz. El índice es de base cero. Si no se encuentra el elemento, se devuelve -1.

Ejemplos

En el ejemplo siguiente se muestra cómo utilizar las funciones indexOf y 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)

El resultado del ejemplo anterior es:

Nombre Tipo Valor
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)

Devuelve el número de elementos de una matriz, caracteres de una cadena o propiedades de nivel raíz de un objeto.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
arg1 matriz, cadena u objeto La matriz que se usará para obtener el número de elementos, la cadena que se usará para obtener el número de caracteres o el objeto que se usará para obtener el número de propiedades del nivel raíz.

Valor devuelto

Un entero.

Ejemplo

En el ejemplo siguiente se muestra cómo utilizar length con una matriz y una cadena:

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)

La salida del ejemplo anterior con el valor predeterminado es:

Nombre Tipo Value
arrayLength Int 3
stringLength Int 13
objectLength Int 4

Ejemplos de inicio rápido

En el ejemplo siguiente se extrae de una plantilla de inicio rápido, Implementación de API Management en una red virtual externa con IP pública:

@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)
  ...
}

En la expresión condicional, la función length comprueba la longitud de la matriz availabilityZones.

Puede encontrar más ejemplos en estos archivos de Inicio rápido de Bicep:

max

max(arg1)

Devuelve el valor máximo de una matriz de enteros o una lista separada por comas de enteros.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
arg1 matriz de enteros, o lista separada por comas de enteros La colección para obtener el valor máximo.

Valor devuelto

Un entero que representa el valor máximo.

Ejemplo

En el ejemplo siguiente se muestra cómo utilizar max con una matriz y una lista de enteros:

param arrayToTest array = [
  0
  3
  2
  5
  4
]

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

La salida del ejemplo anterior con el valor predeterminado es:

Nombre Tipo Value
arrayOutput Int 5
intOutput Int 5

Min

min(arg1)

Devuelve el valor mínimo de una matriz de enteros o una lista separada por comas de enteros.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
arg1 matriz de enteros, o lista separada por comas de enteros La colección para obtener el valor mínimo.

Valor devuelto

Un entero que representa el valor mínimo.

Ejemplo

En el ejemplo siguiente se muestra cómo utilizar min con una matriz y una lista de enteros:

param arrayToTest array = [
  0
  3
  2
  5
  4
]

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

La salida del ejemplo anterior con el valor predeterminado es:

Nombre Tipo Value
arrayOutput Int 0
intOutput Int 0

range

range(startIndex, count)

Crea una matriz de enteros a partir de un entero de inicio y contiene el número de elementos.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
startIndex int El primer entero de la matriz. La suma de startIndex y count no debe ser mayor que 2 147 483 647.
count int El número de enteros en la matriz. Debe ser un entero no negativo de hasta 10 000.

Valor devuelto

Una matriz de enteros.

Ejemplo

En el ejemplo siguiente se muestra cómo utilizar la función range:

param startingInt int = 5
param numberOfElements int = 3

output rangeOutput array = range(startingInt, numberOfElements)

La salida del ejemplo anterior con el valor predeterminado es:

Nombre Tipo Value
rangeOutput Array [5, 6, 7]

Ejemplos de inicio rápido

El ejemplo siguiente se extrae de una plantilla de inicio rápido, Dos máquinas virtuales en la red virtual: reglas de LB y Load Balancer internas :

...
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: {
    ...
  }
}]

El archivo Bicep crea dos recursos networkInterface y dos virtualMachine.

Puede encontrar más ejemplos en estos archivos de Inicio rápido de Bicep:

skip

skip(originalValue, numberToSkip)

Devuelve una matriz con todos los elementos después del número especificado de la matriz, o devuelve una cadena con todos los caracteres después del número especificado en la cadena.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
originalValue matriz o cadena La matriz o cadena que se usará para la omisión.
numberToSkip int El número de elementos o caracteres que se van a omitir. Si este valor es 0 o un valor inferior, se devuelven todos los elementos o caracteres del valor. Si es mayor que la longitud de la matriz o la cadena, se devuelve una matriz o cadena vacía.

Valor devuelto

Una matriz o cadena.

Ejemplo

En el ejemplo siguiente se omite el número especificado de elementos de la matriz, y el número especificado de caracteres de la cadena.

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)

La salida del ejemplo anterior con el valor predeterminado es:

Nombre Tipo Value
arrayOutput Array ["three"]
stringOutput String two three

take

take(originalValue, numberToTake)

Devuelve una matriz con el número especificado de elementos desde el inicio de la matriz, o una cadena con el número especificado de caracteres desde el inicio de la cadena.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
originalValue matriz o cadena La matriz o cadena de la que se van a tomar los elementos.
numberToTake int El número de elementos o caracteres que se van a tomar. Si este valor es 0 o un valor inferior, se devolverá una matriz o cadena vacía. Si es mayor que la longitud de la matriz o cadena especificada, se devuelven todos los elementos de la matriz o cadena.

Valor devuelto

Una matriz o cadena.

Ejemplo

En el ejemplo siguiente se toma el número especificado de elementos de la matriz y de caracteres de la cadena.

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)

La salida del ejemplo anterior con el valor predeterminado es:

Nombre Tipo Value
arrayOutput Array ["one", "two"]
stringOutput String en

union

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

Devuelve una única matriz u objeto con todos los elementos de los parámetros. Para las matrices, los valores duplicados se incluyen una vez. Para los objetos, los nombres de propiedad duplicados solo se incluyen una vez.

Espacio de nombres: sys.

Parámetros

Parámetro Obligatorio Type Descripción
arg1 matriz u objeto El primer valor que se utiliza para unir elementos.
arg2 matriz u objeto El segundo valor que se utiliza para unir elementos.
más argumentos No matriz u objeto Más valores que se utilizan para unir elementos.

Valor devuelto

Una matriz u objeto.

Comentarios

La función de unión usa la secuencia de los parámetros para determinar el orden y los valores del resultado.

Para las matrices, la función se itera por cada elemento del primer parámetro y lo agrega al resultado si no está presente. A continuación, repite el proceso para el segundo parámetro y los parámetros adicionales. Si un valor ya existe, se conserva su ubicación anterior en la matriz.

En el caso de los objetos, los nombres de propiedad y los valores del primer parámetro se agregan al resultado. Para los parámetros posteriores, se agregarán los nuevos nombres al resultado. Si un parámetro posterior tiene una propiedad con el mismo nombre, ese valor sobrescribe el valor existente. El orden de las propiedades no está garantizado.

La función union no solo combina los elementos de nivel superior, sino que también combina de forma recursiva los objetos anidados dentro de ellos. Los valores de matriz anidados no se combinan. Consulte el segundo ejemplo de la sección siguiente.

Ejemplo

En el ejemplo siguiente se muestra cómo utilizar la unión con matrices y objetos:

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)

La salida del ejemplo anterior con el valor predeterminado es:

Nombre Tipo Value
objectOutput Object {"one": "a", "two": "b", "three": "c2", "four": "d", "five": "e"}
arrayOutput Array ["one", "two", "three", "four"]

En el ejemplo siguiente se muestra la capacidad de combinación profunda:

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)

El resultado del ejemplo anterior es:

Nombre Tipo Value
objectOutput Object {"property":{"one":"a","two":"b","three":"c2","four":"d","five":"e"},"nestedArray":[3,4]}
arrayOutput Array [["one","two"],["three"],["four","two"]]

Si se combinaron matrices anidadas, el valor de objectOutput.nestedArray sería [1, 2, 3, 4], y el valor de arrayOutput sería [["one", "two", "three"], ["three", "four", "two"]].

Pasos siguientes

  • Para obtener una matriz de valores de cadena delimitada por un valor, consulte split.