Bicep の配列関数
この記事では、配列を操作するための Bicep 関数について説明します。 配列を操作するためのラムダ関数については、こちらを参照してください。
array
array(convertToArray)
値を配列に変換します。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
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)
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
intOutput | Array | [1] |
stringOutput | Array | ["efgh"] |
objectOutput | Array | [{"a": "b", "c": "d"}] |
concat
concat(arg1, arg2, arg3, ...)
複数の配列を結合し、連結された配列を返します。 複数の文字列の組み合わせの詳細については、「concat」を参照してください。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
arg1 | はい | array | 連結の最初の配列。 |
その他の引数 | いいえ | array | 連結する順のその他の配列。 |
この関数は、任意の数の配列を受け取り、それらを結合します。
戻り値
連結された値の配列。
例
次の例では、2 つの配列を結合する方法を示します。
param firstArray array = [
'1-1'
'1-2'
'1-3'
]
param secondArray array = [
'2-1'
'2-2'
'2-3'
]
output return array = concat(firstArray, secondArray)
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
戻り値 | Array | ["1-1", "1-2", "1-3", "2-1", "2-2", "2-3"] |
contains
contains(container, itemToFind)
配列に値が含まれるかどうか、オブジェクトにキーが含まれるかどうか、または文字列に部分文字列が含まれるかどうかを確認します。 文字列比較では大文字・小文字を区別します。 ただし、オブジェクトにキーが含まれているかどうかをテストする場合、比較で大文字・小文字を区別しません。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
container | はい | 配列、オブジェクト、文字列 | 検索対象の値を含む値。 |
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')
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
stringTrue | Bool | True |
stringFalse | Bool | False |
objectTrue | Bool | True |
objectFalse | Bool | False |
arrayTrue | Bool | True |
arrayFalse | Bool | False |
空
empty(itemToTest)
配列、オブジェクト、または文字列が空か null かを判断します。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
itemToTest | はい | 配列、オブジェクト、文字列 | 空または null であるかどうかを確認する値。 |
戻り値
値が空または null の場合は True を返し、それ以外の場合は False を返します。
例
次の例では、配列、オブジェクト、および文字列が空かどうかを確認します。
param testArray array = []
param testObject object = {}
param testString string = ''
param testNullString string?
output arrayEmpty bool = empty(testArray)
output objectEmpty bool = empty(testObject)
output stringEmpty bool = empty(testString)
output stringNull bool = empty(testNullString)
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
arrayEmpty | Bool | True |
objectEmpty | Bool | True |
stringEmpty | Bool | True |
stringNull | Bool | True |
クイック スタートの例
次の例は、「診断ログを設定した Virtual Network」のクイック スタート テンプレートから抽出したものです。
@description('Array containing DNS Servers')
param dnsServers array = []
...
resource vnet 'Microsoft.Network/virtualNetworks@2023-11-01' = {
name: vnetName
location: location
properties: {
addressSpace: {
addressPrefixes: vnetAddressSpace
}
dhcpOptions: empty(dnsServers) ? null : {
dnsServers: dnsServers
}
...
}
}
条件式では、空の関数を使用して、dnsServers 配列が空の配列であるかどうかを確認します。
first
first(arg1)
配列の最初の要素、または文字列の最初の文字を返します。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
arg1 | はい | 配列または文字列 | 最初の要素または文字を取得する値。 |
戻り値
配列の最初の要素の型 (文字列、整数、配列、またはオブジェクト)、または文字列の最初の文字。
例
次の例では、first 関数を配列および文字列と共に使用する方法を示します。
param arrayToTest array = [
'one'
'two'
'three'
]
output arrayOutput string = first(arrayToTest)
output stringOutput string = first('One Two Three')
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
arrayOutput | String | one |
stringOutput | String | O |
フラット化 (flatten)
flatten(arrayToFlatten)
配列の配列を受け取り、元の順序でサブ配列要素の配列を返します。 サブアレイは 1 回だけフラット化され、再帰的にはフラット化されません。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
arrayToFlattern | はい | array | フラット化するサブ配列の配列。 |
戻り値
Array
例
次の例は、フラット化関数の使用法を示しています。
param arrayToTest array = [
['one', 'two']
['three']
['four', 'five']
]
output arrayOutput array = flatten(arrayToTest)
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
arrayOutput | array | ['one', 'two', 'three', 'four', 'five'] |
indexOf
indexOf(arrayToSearch, itemToFind)
ある項目が配列内で最初に見つかった位置のインデックスの整数を返します。 文字列式の比較では大文字と小文字が区別されます。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
arrayToSearch | はい | array | 検索対象項目のインデックスを見つけるために使われる配列。 |
itemToFind | はい | 整数、文字列、配列、オブジェクト | 配列内で見つける項目。 |
戻り値
配列内の項目の最初のインデックスを表す整数。 インデックスは 0 から始まります。 項目が見つからない場合は、-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)
前の例からの出力は次のようになります。
名前 | Type | 値 |
---|---|---|
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, ...)
パラメーターから共通の要素を持つ 1 つの配列またはオブジェクトを返します。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
arg1 | はい | 配列またはオブジェクト | 共通の要素の検索に使用する 1 番目の値。 |
arg2 | はい | 配列またはオブジェクト | 共通の要素の検索に使用する 2 番目の値。 |
その他の引数 | いいえ | 配列またはオブジェクト | 共通の要素の検索に使用するその他の値。 |
戻り値
共通の要素を持つ配列またはオブジェクト。 要素の順序は、最初の配列パラメーターによって決まります。
例
次の例では、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)
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
objectOutput | Object | {"one": "a", "three": "c"} |
arrayOutput | Array | ["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)
前の例からの出力は次のようになります。
名前 | Type | 値 |
---|---|---|
commonUp | array | [1, 2, 3] |
commonDown | array | [3, 2, 1] |
last
last(arg1)
配列の最後の要素、または文字列の最後の文字を返します。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
arg1 | はい | 配列または文字列 | 最後の要素または文字を取得する値。 |
戻り値
配列の最後の要素の型 (文字列、整数、配列、またはオブジェクト)、または文字列の最後の文字。
例
次の例では、last 関数を配列および文字列と共に使用する方法を示します。
param arrayToTest array = [
'one'
'two'
'three'
]
output arrayOutput string = last(arrayToTest)
output stringOutput string = last('One Two three')
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
arrayOutput | String | three |
stringOutput | String | e |
lastIndexOf
lastIndexOf(arrayToSearch, itemToFind)
ある項目が配列内で最後に見つかった位置のインデックスの整数を返します。 文字列式の比較では大文字と小文字が区別されます。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
arrayToSearch | はい | array | 検索対象項目のインデックスを見つけるために使われる配列。 |
itemToFind | はい | 整数、文字列、配列、オブジェクト | 配列内で見つける項目。 |
戻り値
配列内の項目の最後のインデックスを表す整数。 インデックスは 0 から始まります。 項目が見つからない場合は、-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)
前の例からの出力は次のようになります。
名前 | Type | 値 |
---|---|---|
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。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
arg1 | はい | array、string、または object | 要素の数を取得するために使用する配列、文字の数を取得するために使用する文字列、またはルート レベル プロパティの数を取得するために使用するオブジェクト。 |
戻り値
整数。
例
次の例では、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)
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
arrayLength | int | 3 |
stringLength | int | 13 |
objectLength | int | 4 |
クイック スタートの例
次の例は、クイック スタート テンプレート「パブリック IP を使用して外部 VNet にAPI Management をデプロイする」から抽出されています。
@description('Numbers for availability zones, for example, 1,2,3.')
param availabilityZones array = [
'1'
'2'
]
resource exampleApim 'Microsoft.ApiManagement/service@2023-05-01-preview' = {
name: apiManagementName
location: location
sku: {
name: sku
capacity: skuCount
}
zones: ((length(availabilityZones) == 0) ? null : availabilityZones)
...
}
条件式で、length
関数は availabilityZones 配列の長さを確認します。
その他の例については、次のクイック スタートの Bicep ファイルを参照してください。
- Recovery Services コンテナーを使用して VM Resource Manager をバックアップする
- Availability Zones に API Management をデプロイする
- ルールと Ipgroups を使用してファイアウォールと FirewallPolicy を作成する
- ゾーンを使用して Azure Firewall にサンドボックス セットアップを作成する
max
max(arg1)
整数の配列または整数のコンマ区切りリストから最大値を返します。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
arg1 | はい | 整数の配列、または整数のコンマ区切りリスト | 最大値を取得するコレクション。 |
戻り値
最大値を表す整数。
例
次の例では、max を配列および整数のリストと共に使用する方法を示します。
param arrayToTest array = [
0
3
2
5
4
]
output arrayOutput int = max(arrayToTest)
output intOutput int = max(0,3,2,5,4)
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
arrayOutput | int | 5 |
intOutput | int | 5 |
min
min(arg1)
整数の配列または整数のコンマ区切りリストから最小値を返します。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
arg1 | はい | 整数の配列、または整数のコンマ区切りリスト | 最小値を取得するコレクション。 |
戻り値
最小値を表す整数。
例
次の例では、min を配列および整数のリストと共に使用する方法を示します。
param arrayToTest array = [
0
3
2
5
4
]
output arrayOutput int = min(arrayToTest)
output intOutput int = min(0,3,2,5,4)
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
arrayOutput | int | 0 |
intOutput | int | 0 |
range
range(startIndex, count)
始点となる整数から、指定した数の項目が含まれる配列を作成します。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
startIndex | はい | INT | 配列の最初の整数です。 startIndex と count の合計は、2147483647 より大きくてはいけません。 |
count | はい | INT | 配列内の整数の数。 10000 までの負でない整数にする必要があります。 |
戻り値
整数の配列。
例
次の例では、range 関数を使用する方法を示します。
param startingInt int = 5
param numberOfElements int = 3
output rangeOutput array = range(startingInt, numberOfElements)
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
rangeOutput | Array | [5, 6, 7] |
クイック スタートの例
次の例は、クイック スタート テンプレート「VNET 内の 2 つの VM - 内部ロード バランサーと LB ルール」から抽出されます。
...
var numberOfInstances = 2
resource networkInterface 'Microsoft.Network/networkInterfaces@2023-11-01' = [for i in range(0, numberOfInstances): {
name: '${networkInterfaceName}${i}'
location: location
properties: {
...
}
}]
resource vm 'Microsoft.Compute/virtualMachines@2024-03-01' = [for i in range(0, numberOfInstances): {
name: '${vmNamePrefix}${i}'
location: location
properties: {
...
}
}]
Bicep ファイルは、2 つの networkInterface と 2 つの virtualMachine リソースを作成します。
その他の例については、次のクイック スタートの Bicep ファイルを参照してください。
- マネージド ディスクを使用したマルチ VM テンプレート
- 複数の空の StandardSSD_LRS Data Disks を使用して VM を作成する
- ルールと Ipgroups を使用してファイアウォールと FirewallPolicy を作成する
- IpGroups を使用して Azure Firewall を作成する
- ゾーンを使用して Azure Firewall にサンドボックス セットアップを作成する
- 複数の IP パブリック アドレスを持つ Azure Firewall を作成する
- Standard Load Balancer を作成する
- Azure Traffic Manager VM の例
- 特定のアラートのセキュリティ オートメーションを作成する
- パフォーマンスが最適化されたストレージ設定を含む SQL Server VM
- 複数の BLOB コンテナーを使用してストレージ アカウントを作成する
- 複数のファイル共有を使用してストレージ アカウントを作成する
skip
skip(originalValue, numberToSkip)
配列内の指定した数の要素の後にあるすべての要素から成る配列を返します。または、文字列内の指定した数の文字の後にあるすべての文字から成る文字列を返します。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
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)
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
arrayOutput | Array | ["three"] |
stringOutput | String | two three |
take
take(originalValue, numberToTake)
配列の先頭から指定した数の要素を含む配列、または文字列の先頭から指定した数の文字を含む文字列を返します。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
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)
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
arrayOutput | Array | ["one", "two"] |
stringOutput | String | on |
union
union(arg1, arg2, arg3, ...)
パラメーターからすべての要素を持つ 1 つの配列またはオブジェクトを返します。 配列の場合、重複する値は 1 回含められます。 オブジェクトの場合、重複するプロパティ名は 1 回だけ含められまれます。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
arg1 | はい | 配列またはオブジェクト | 要素の結合に使用される 1 番目の値。 |
arg2 | はい | 配列またはオブジェクト | 要素の結合に使用される 2 番目の値。 |
その他の引数 | いいえ | 配列またはオブジェクト | 要素の結合に使用されるその他の値。 |
戻り値
配列またはオブジェクト。
注釈
UNION 関数では、パラメーターのシーケンスを使用して、結果の順序と値を決定します。
配列の場合、関数により、最初のパラメーターの各要素が反復処理され、まだ存在していない場合は結果に追加されます。 その後、2 番目以降のパラメーター (ある場合) に対して処理が繰り返されます。 値が既に存在する場合は、配列内の以前の配置が保持されます。
オブジェクトの場合、最初のパラメーターのプロパティ名と値が結果に追加されます。 以降のパラメーターでは、結果に新しい名前 (ある場合) が追加されます。 後のパラメーターに同じ名前のプロパティがある場合、既存の値はその値で上書きされます。 プロパティの順序は保証されません。
Union 関数は、最上位レベルの要素だけでなく、その中の入れ子になったオブジェクトも再帰的にマージします。 入れ子になった配列値はマージされません。 次のセクションの 2 番目の例を参照してください。
例
次の例では、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)
既定値を使用した場合の前の例の出力は次のようになります。
名前 | Type | 値 |
---|---|---|
objectOutput | Object | {"one": "a", "two": "b", "three": "c2", "four": "d", "five": "e"} |
arrayOutput | Array | ["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)
前の例からの出力は次のようになります。
名前 | Type | 値 |
---|---|---|
objectOutput | Object | {"property":{"one":"a","two":"b","three":"c2","four":"d","five":"e"},"nestedArray":[3,4]} |
arrayOutput | Array | [["one","two"],["three"],["four","two"]] |
入れ子になった配列がマージされた場合、objectOutput.nestedArray の値は [1, 2, 3, 4] になり、arrayOutput の値は [["one", "two", "three"], ["three", "four", "two"]] になります。
次のステップ
- 文字列値の配列をある値で区切られた状態にするには、「 split」を参照してください。