Lambda-functies voor ARM-sjablonen
In dit artikel worden de lambda-functies beschreven die moeten worden gebruikt in ARM-sjablonen. Lambda-functies zijn in wezen blokken code die als argument kunnen worden doorgegeven. Ze kunnen meerdere parameters gebruiken, maar zijn beperkt tot één regel code. In Bicep heeft lambda-expressie deze indeling:
lambda(<lambda variable>, [<lambda variable>, ...], <expression>)
Tip
We raden Bicep aan omdat het dezelfde mogelijkheden biedt als ARM-sjablonen en de syntaxis gemakkelijker te gebruiken is. Zie implementatiefuncties voor meer informatie.
Beperkingen
De lambda-functie van arm-sjabloon heeft deze beperkingen:
- Lambda-expressie kan alleen rechtstreeks worden opgegeven als functieargumenten in deze functies:
filter()
, ,groupBy()
mapValues()
map()
, ,reduce()
, , ,sort()
en .toObject()
- Het gebruik van lambda-variabelen (de tijdelijke variabelen die worden gebruikt in de lambda-functies) binnen resource- of modulematrixtoegang wordt momenteel niet ondersteund.
- Het gebruik van lambda-variabelen in de
listKeys
functie wordt momenteel niet ondersteund. - Het gebruik van lambda-variabelen in de referentiefunctie wordt momenteel niet ondersteund.
filter
filter(inputArray, lambda function)
Hiermee filtert u een matrix met een aangepaste filterfunctie.
Gebruik in Bicep de filterfunctie .
Parameters
Parameter | Vereist | Type | Description |
---|---|---|---|
inputArray | Ja | matrix | De matrix die moet worden gefilterd. |
lambda, functie | Ja | Expressie | De lambda-functie die wordt toegepast op elk invoermatrixelement. Als dit onwaar is, wordt het item uit de uitvoermatrix gefilterd. |
Retourwaarde
Een matrix.
Voorbeelden
In de volgende voorbeelden ziet u hoe u de filter
functie gebruikt.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"dogs": [
{
"name": "Evie",
"age": 5,
"interests": [
"Ball",
"Frisbee"
]
},
{
"name": "Casper",
"age": 3,
"interests": [
"Other dogs"
]
},
{
"name": "Indy",
"age": 2,
"interests": [
"Butter"
]
},
{
"name": "Kira",
"age": 8,
"interests": [
"Rubs"
]
}
]
},
"resources": [],
"outputs": {
"oldDogs": {
"type": "array",
"value": "[filter(variables('dogs'), lambda('dog', greaterOrEquals(lambdaVariables('dog').age, 5)))]"
},
"dogNameIndex": {
"type": "array",
"value": "[filter(variables('dogs'), lambda('val', 'i', and(less(lambdaVariables('i'), 2), equals(substring(lambdaVariables('val').name, 0, 1), 'C'))))]"
}
}
}
De uitvoer uit het vorige voorbeeld:
Name | Type | Weergegeven als |
---|---|---|
oldDogs | Matrix | [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interest":["Rubs"]}] |
dogNameIndex | Matrix | [{"name":"Source","age":3,"interest":["Other dogs"]}] |
oldDogs vermeldt de honden die vijf of ouder zijn; dogNameIndex identificeert de honden waarvan het indexnummer kleiner is dan twee en waarvan de naam begint met de letter C.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"copy": [
{
"name": "itemForLoop",
"count": "[length(range(0, 10))]",
"input": "[range(0, 10)[copyIndex('itemForLoop')]]"
}
]
},
"resources": [],
"outputs": {
"filteredLoop": {
"type": "array",
"value": "[filter(variables('itemForLoop'), lambda('i', greater(lambdaVariables('i'), 5)))]"
},
"isEven": {
"type": "array",
"value": "[filter(range(0, 10), lambda('i', equals(0, mod(lambdaVariables('i'), 2))))]"
}
}
}
De uitvoer uit het vorige voorbeeld:
Name | Type | Weergegeven als |
---|---|---|
filteredLoop | Matrix | [6, 7, 8, 9] |
isEven | Matrix | [0, 2, 4, 6, 8] |
filterdLoop toont de getallen in een matrix die groter is dan 5; en isEven toont de even getallen in de matrix.
groupBy
groupBy(inputArray, lambda expression)
Hiermee maakt u een object met matrixwaarden van een matrix met behulp van een groeperingsvoorwaarde.
Gebruik in Bicep de groupBy-functie .
Parameters
Parameter | Vereist | Type | Description |
---|---|---|---|
inputArray | Ja | matrix | De matrix voor groepering. |
lambda-expressie | Ja | Expressie | De lambda-expressie wordt toegepast op elk invoermatrixelement en groepeert de elementen met behulp van de groeperingsvoorwaarde. |
Retourwaarde
Een object.
Voorbeelden
In het volgende voorbeeld ziet u hoe u de groupBy
functie gebruikt.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"inputArray": [
"foo",
"bar",
"baz"
]
},
"resources": [],
"outputs": {
"outObject": {
"type": "object",
"value": "[groupBy(variables('inputArray'), lambda('x', substring(lambdaVariables('x'), 0, 1)))]"
}
}
}
In de uitvoer van het vorige voorbeeld ziet u de honden die vijf of ouder zijn:
Name | Type | Weergegeven als |
---|---|---|
outObject | Object | {"f":["foo"],"b":["bar","baz"]} |
outObject toont een object waarmee de matrixelementen worden gegroepeerd op basis van de eerste letters.
map
map(inputArray, lambda function)
Hiermee past u een aangepaste toewijzingsfunctie toe op elk element van een matrix.
Gebruik in Bicep de kaartfunctie .
Parameters
Parameter | Vereist | Type | Description |
---|---|---|---|
inputArray | Ja | matrix | De matrix die moet worden toegewezen. |
lambda, functie | Ja | Expressie | De lambda-functie die wordt toegepast op elk invoermatrixelement, om de uitvoermatrix te genereren. |
Retourwaarde
Een matrix.
Opmerking
In het volgende voorbeeld ziet u hoe u de map
functie gebruikt.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"dogs": [
{
"name": "Evie",
"age": 5,
"interests": [
"Ball",
"Frisbee"
]
},
{
"name": "Casper",
"age": 3,
"interests": [
"Other dogs"
]
},
{
"name": "Indy",
"age": 2,
"interests": [
"Butter"
]
},
{
"name": "Kira",
"age": 8,
"interests": [
"Rubs"
]
}
]
},
"resources": [],
"outputs": {
"dogNames": {
"type": "array",
"value": "[map(variables('dogs'), lambda('dog', lambdaVariables('dog').name))]"
},
"sayHi": {
"type": "array",
"value": "[map(variables('dogs'), lambda('dog', format('Hello {0}!', lambdaVariables('dog').name)))]"
},
"mapArray": {
"type": "array",
"value": "[map(range(0, length(variables('dogs'))), lambda('i', createObject('i', lambdaVariables('i'), 'dog', variables('dogs')[lambdaVariables('i')].name, 'greeting', format('Ahoy, {0}!', variables('dogs')[lambdaVariables('i')].name))))]"
},
"mapArrayIndex": {
"type": "array",
"value": "[map(variables('dogs'), lambda('x', 'i', createObject('index', lambdaVariables('i'), 'val', lambdaVariables('x').name)))]"
}
}
}
De uitvoer uit het voorgaande voorbeeld is:
Name | Type | Weergegeven als |
---|---|---|
dogNames | Matrix | ["Evie","Neerkom","Indy","Kira"] |
sayHi | Matrix | ["Hallo Evie!","Hallo Neerkom!","Hallo Indy!","Hallo Kira!"] |
mapArray | Matrix | [{"i":0,"dog":"Evie","greeting":"Ahoy, Evie!},{"i":1,"dog":"Neerkom","begroeting":"Ahoy,Source!"},{"i":2,"dog":"Indy","greeting":"Ahoy, Indy!"},{"i":3,"dog":"Kira","greeting":"Ahoy, Kira!"}] |
mapArrayIndex | Matrix | [{"index":0,"val":"Evie"},{"index":1,"val":"Neerkom"},{"index":2,"val":"Indy"},{"index":3,"val":"Kira"}] |
dogNames toont de namen van de honden uit de matrix van objecten; sayHi voegt "Hallo" en elk van de namen van de honden samen; mapArray en mapArrayIndex maken nog twee matrices van objecten.
mapValues
mapValues(inputObject, lambda expression)
Hiermee maakt u een object op basis van een invoerobject met behulp van een lambda-expressie om waarden toe te wijzen.
Gebruik in Bicep de functie mapValues .
Parameters
Parameter | Vereist | Type | Description |
---|---|---|---|
inputObject | Ja | object | Het object dat moet worden toegewezen. |
lambda-expressie | Ja | Expressie | De lambda-expressie die wordt gebruikt om de waarden toe te wijzen. |
Retourwaarde
Een object.
Opmerking
In het volgende voorbeeld ziet u hoe u de mapValues
functie gebruikt.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"inputObject": {
"foo": "foo",
"bar": "bar"
}
},
"resources": [],
"outputs": {
"mapObject": {
"type": "object",
"value": "[mapValues(variables('inputObject'), lambda('val', toUpper(lambdaVariables('val'))))]"
}
}
}
De uitvoer uit het voorgaande voorbeeld is:
Name | Type | Weergegeven als |
---|---|---|
mapObject | Object | {foo: 'FOO', balk: 'BAR'} |
mapObject maakt een ander object met de waarden in hoofdletters.
Verminderen
reduce(inputArray, initialValue, lambda function)
Vermindert een matrix met een aangepaste reductiefunctie.
Gebruik in Bicep de reductiefunctie .
Parameters
Parameter | Vereist | Type | Description |
---|---|---|---|
inputArray | Ja | matrix | De matrix die moet worden verkleind. |
initialValue | Ja | willekeurige | Initiële waarde. |
lambda, functie | Ja | Expressie | De lambda-functie die wordt gebruikt om de huidige waarde en de volgende waarde samen te voegen. |
Retourwaarde
Alle.
Opmerking
In de volgende voorbeelden ziet u hoe u de reduce
functie gebruikt.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"dogs": [
{
"name": "Evie",
"age": 5,
"interests": [
"Ball",
"Frisbee"
]
},
{
"name": "Casper",
"age": 3,
"interests": [
"Other dogs"
]
},
{
"name": "Indy",
"age": 2,
"interests": [
"Butter"
]
},
{
"name": "Kira",
"age": 8,
"interests": [
"Rubs"
]
}
],
"ages": "[map(variables('dogs'), lambda('dog', lambdaVariables('dog').age))]"
},
"resources": [],
"outputs": {
"totalAge": {
"type": "int",
"value": "[reduce(variables('ages'), 0, lambda('cur', 'next', add(lambdaVariables('cur'), lambdaVariables('next'))))]"
},
"totalAgeAdd1": {
"type": "int",
"value": "[reduce(variables('ages'), 1, lambda('cur', 'next', add(lambdaVariables('cur'), lambdaVariables('next'))))]"
},
"oddAge": {
"type": "int",
"value": "[reduce(variables('ages'), 0, lambda('cur', 'next', 'i', if(equals(mod(lambdaVariables('i'), 2), 0), add(lambdaVariables('cur'), lambdaVariables('next')), lambdaVariables('cur'))))]"
}
}
}
De uitvoer uit het voorgaande voorbeeld is:
Name | Type | Weergegeven als |
---|---|---|
totalage | int | 18 |
totalAgeAdd1 | int | 19 |
oddAge | int | 7 |
totalAge telt de leeftijden van de honden op; totalAgeAdd1 heeft een initiële waarde van 1 en voegt alle leeftijden van de hond toe aan de initiële waarden. oddAge telt de leeftijden van honden op die zich op even indexen bevinden, met name 5 (Evie) en 2 (Indy).
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [],
"outputs": {
"reduceObjectUnion": {
"type": "object",
"value": "[reduce(createArray(createObject('foo', 123), createObject('bar', 456), createObject('baz', 789)), createObject(), lambda('cur', 'next', union(lambdaVariables('cur'), lambdaVariables('next'))))]"
}
}
}
De uitvoer uit het voorgaande voorbeeld is:
Name | Type | Weergegeven als |
---|---|---|
reduceObjectUnion | object | {"foo":123,"bar":456,"baz":789} |
De samenvoegfunctie retourneert één object met alle elementen uit de parameters. Met de functie worden de sleutelwaardeparen van de objecten samengevoegd in een nieuw object.
sort
sort(inputArray, lambda function)
Hiermee sorteert u een matrix met een aangepaste sorteerfunctie.
Gebruik in Bicep de sorteerfunctie .
Parameters
Parameter | Vereist | Type | Description |
---|---|---|---|
inputArray | Ja | matrix | De matrix die moet worden gesorteerd. |
lambda, functie | Ja | Expressie | De lambda-functie die wordt gebruikt om twee matrixelementen te vergelijken voor ordenen. Indien waar, wordt het tweede element na de eerste in de uitvoermatrix geordend. |
Retourwaarde
Een matrix.
Opmerking
In het volgende voorbeeld ziet u hoe u de sort
functie gebruikt.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"dogs": [
{
"name": "Evie",
"age": 5,
"interests": [
"Ball",
"Frisbee"
]
},
{
"name": "Casper",
"age": 3,
"interests": [
"Other dogs"
]
},
{
"name": "Indy",
"age": 2,
"interests": [
"Butter"
]
},
{
"name": "Kira",
"age": 8,
"interests": [
"Rubs"
]
}
]
},
"resources": [],
"outputs": {
"dogsByAge": {
"type": "array",
"value": "[sort(variables('dogs'), lambda('a', 'b', less(lambdaVariables('a').age, lambdaVariables('b').age)))]"
}
}
}
De uitvoer uit het voorgaande voorbeeld sorteert de hondenobjecten van de jongste naar de oudste:
Name | Type | Weergegeven als |
---|---|---|
dogsByAge | Matrix | [{"name":"Indy","age":2,"interest":["Butter"]},{"name":"Source","age":3,"interest":["Other dogs"]},{"name ":"Evie","age":5,"interest":["Ball","Frisbee"]},{"name":"Kira","age":8,"interest":["Rubs"]}] |
Toobject
toObject(inputArray, lambda function, [lambda function])
Converteert een matrix naar een object met een aangepaste sleutelfunctie en optionele aangepaste waardefunctie. Zie items over het converteren van een object naar een matrix.
Gebruik in Bicep de functie toObject .
Parameters
Parameter | Vereist | Type | Description |
---|---|---|---|
inputArray | Ja | matrix | De matrix die wordt gebruikt voor het maken van een object. |
lambda, functie | Ja | Expressie | De lambda-functie die wordt gebruikt om het sleutelpredicaat op te geven. |
lambda, functie | Nee | Expressie | De lambda-functie die wordt gebruikt om het waardepredicaat op te geven. |
Retourwaarde
Een object.
Opmerking
In het volgende voorbeeld ziet u hoe u de toObject
functie gebruikt met de twee vereiste parameters:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"dogs": [
{
"name": "Evie",
"age": 5,
"interests": [
"Ball",
"Frisbee"
]
},
{
"name": "Casper",
"age": 3,
"interests": [
"Other dogs"
]
},
{
"name": "Indy",
"age": 2,
"interests": [
"Butter"
]
},
{
"name": "Kira",
"age": 8,
"interests": [
"Rubs"
]
}
]
},
"resources": [],
"outputs": {
"dogsObject": {
"type": "object",
"value": "[toObject(variables('dogs'), lambda('entry', lambdaVariables('entry').name))]"
}
}
}
In het voorgaande voorbeeld wordt een object gegenereerd op basis van een matrix.
Name | Type | Weergegeven als |
---|---|---|
dogsObject | Object | {"Evie":{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},"Resource":{"name":"Resource","age":3,"interest":["Other dogs"]},,"Indy":{"name":"Indy","age":2,"interest":["Butter"]},"Kira":{"name":"Kira","age":8,"interest":["Rubs"]}} |
De volgende toObject
functie met de derde parameter biedt dezelfde uitvoer.
"outputs": {
"dogsObject": {
"type": "object",
"value": "[toObject(variables('dogs'), lambda('entry', lambdaVariables('entry').name), lambda('entry', lambdaVariables('entry')))]"
}
}
In het volgende voorbeeld ziet u hoe u de toObject
functie gebruikt met drie parameters.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"dogs": [
{
"name": "Evie",
"properties": {
"age": 5,
"interests": [
"Ball",
"Frisbee"
]
}
},
{
"name": "Casper",
"properties": {
"age": 3,
"interests": [
"Other dogs"
]
}
},
{
"name": "Indy",
"properties": {
"age": 2,
"interests": [
"Butter"
]
}
},
{
"name": "Kira",
"properties": {
"age": 8,
"interests": [
"Rubs"
]
}
}
]
},
"resources": [],
"outputs": {
"dogsObject": {
"type": "object",
"value": "[toObject(variables('dogs'), lambda('entry', lambdaVariables('entry').name), lambda('entry', lambdaVariables('entry').properties))]"
}
}
}
In het voorgaande voorbeeld wordt een object gegenereerd op basis van een matrix.
Name | Type | Weergegeven als |
---|---|---|
dogsObject | Object | {"Evie":{"age":5,"interest":["Ball","Frisbee"]},"Neerkom":{"age":3,"interests":["Other dogs"]},"Indy":{"age":2,"interest":["Butter"]},"Kira":{"age":8,"interest":["Rubs"]}} |
Volgende stappen
- Zie Sjabloonfuncties: matrices voor meer matrixgerelateerde sjabloonfuncties.