次の方法で共有


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 ファイルを参照してください。

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 ファイルを参照してください。

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」を参照してください。