Lambda-funktioner för ARM-mallar
Den här artikeln beskriver lambda-funktionerna som ska användas i ARM-mallar. Lambda-funktioner är i huvudsak kodblock som kan skickas som ett argument. De kan ta flera parametrar, men är begränsade till en enda kodrad. I Bicep är lambda-uttrycket i det här formatet:
lambda(<lambda variable>, [<lambda variable>, ...], <expression>)
Dricks
Vi rekommenderar Bicep eftersom det erbjuder samma funktioner som ARM-mallar och syntaxen är enklare att använda. Mer information finns i distributionsfunktioner .
Begränsningar
Funktionen lambda för ARM-mallar har följande begränsningar:
- Lambda-uttryck kan bara anges direkt som funktionsargument i dessa funktioner:
filter()
,groupBy()
,map()
,mapValues()
,reduce()
,sort()
ochtoObject()
. - Användning av lambda-variabler (de tillfälliga variabler som används i lambda-funktionerna) i resurs- eller modulmatrisåtkomst stöds inte för närvarande.
- Det finns för närvarande inte stöd för att använda lambda-variabler i
listKeys
funktionen. - Det finns för närvarande inte stöd för att använda lambda-variabler i referensfunktionen .
filter
filter(inputArray, lambda function)
Filtrerar en matris med en anpassad filtreringsfunktion.
Använd filterfunktionen i Bicep.
Parametrar
Parameter | Obligatoriskt | Type | Beskrivning |
---|---|---|---|
inputArray | Ja | matris | Matrisen som ska filtreras. |
lambda-funktion | Ja | Uttryck | Lambda-funktionen som tillämpas på varje indatamatriselement. Om det är falskt filtreras objektet bort från utdatamatrisen. |
Returvärde
En matris.
Exempel
I följande exempel visas hur du filter
använder funktionen.
{
"$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'))))]"
}
}
}
Utdata från föregående exempel:
Namn | Typ | Värde |
---|---|---|
oldDogs | Matris | [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}] |
dogNameIndex | Matris | [{"name":"Casper","age":3,"interests":["Other dogs"]}] |
oldDogs listar de hundar som är fem eller äldre; dogNameIndex identifierar de hundar vars indexnummer är mindre än två och vars namn börjar med bokstaven "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))))]"
}
}
}
Utdata från föregående exempel:
Namn | Typ | Värde |
---|---|---|
filteredLoop | Matris | [6, 7, 8, 9] |
isEven | Matris | [0, 2, 4, 6, 8] |
filterdLoop visar talen i en matris som är större än 5, och isEven visar jämna tal i matrisen.
groupBy
groupBy(inputArray, lambda expression)
Skapar ett objekt med matrisvärden från en matris med hjälp av ett grupperingsvillkor.
I Bicep använder du funktionen groupBy .
Parametrar
Parameter | Obligatoriskt | Type | Beskrivning |
---|---|---|---|
inputArray | Ja | matris | Matrisen för gruppering. |
lambda-uttryck | Ja | Uttryck | Lambda-uttrycket tillämpas på varje indatamatriselement och grupperar elementen med hjälp av grupperingsvillkoret. |
Returvärde
Ett objekt.
Exempel
I följande exempel visas hur du groupBy
använder funktionen.
{
"$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)))]"
}
}
}
Utdata från föregående exempel visar de hundar som är fem eller äldre:
Namn | Typ | Värde |
---|---|---|
outObject | Objekt | {"f":["foo"],"b":["bar","baz"]} |
outObject visar ett objekt som grupperar matriselementen med sina första bokstäver.
map
map(inputArray, lambda function)
Tillämpar en anpassad mappningsfunktion på varje element i en matris.
Använd kartfunktionen i Bicep.
Parametrar
Parameter | Obligatoriskt | Type | Beskrivning |
---|---|---|---|
inputArray | Ja | matris | Matrisen som ska mappas. |
lambda-funktion | Ja | Uttryck | Lambda-funktionen som tillämpas på varje indatamatriselement för att generera utdatamatrisen. |
Returvärde
En matris.
Exempel
I följande exempel visas hur du map
använder funktionen.
{
"$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)))]"
}
}
}
Utdata från föregående exempel är:
Namn | Typ | Värde |
---|---|---|
dogNames | Matris | ["Evie","Casper","Indy","Kira"] |
sayHi | Matris | ["Hello Evie!","Hello Casper!","Hello Indy!","Hello Kira!"] |
mapArray | Matris | [{"i":0,"hund":"Evie","hälsning":"Ahoy, Evie!"},{"i":1,"hund":"Casper","hälsning":"Ahoy, Casper!"},{"i":2,"hund":"Indy","hälsning":"Ahoy, Indy!"},{"i":3,"hund":"Kira","hälsning":"Ahoy, Kira!}] |
mapArrayIndex | Matris | [{"index":0,"val":"Evie"},{"index":1,"val":"Casper"},{"index":2,"val":"Indy"},{"index":3,"val":"Kira"}] |
dogNames visar hundnamnen från matrisen med objekt; sayHi sammanfogar "Hello" och vart och ett av hundnamnen; mapArray och mapArrayIndex skapar ytterligare två matriser med objekt.
mapValues
mapValues(inputObject, lambda expression)
Skapar ett objekt från ett indataobjekt med hjälp av ett lambda-uttryck för att mappa värden.
I Bicep använder du funktionen mapValues .
Parametrar
Parameter | Obligatoriskt | Type | Beskrivning |
---|---|---|---|
inputObject | Ja | objekt | Objektet som ska mappas. |
lambda-uttryck | Ja | Uttryck | Lambda-uttrycket som används för att mappa värdena. |
Returvärde
Ett objekt.
Exempel
I följande exempel visas hur du mapValues
använder funktionen.
{
"$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'))))]"
}
}
}
Utdata från föregående exempel är:
Namn | Typ | Värde |
---|---|---|
mapObject | Objekt | {foo: 'FOO', bar: 'BAR'} |
mapObject skapar ett annat objekt med värdena i versaler.
Minska
reduce(inputArray, initialValue, lambda function)
Minskar en matris med en anpassad reduce-funktion.
Använd reduce-funktionen i Bicep.
Parametrar
Parameter | Obligatoriskt | Type | Beskrivning |
---|---|---|---|
inputArray | Ja | matris | Matrisen som ska minskas. |
initialValue | Ja | någon | Ursprungligt värde. |
lambda-funktion | Ja | Uttryck | Lambda-funktionen som används för att aggregera det aktuella värdet och nästa värde. |
Returvärde
Någon.
Exempel
I följande exempel visas hur du reduce
använder funktionen.
{
"$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'))))]"
}
}
}
Utdata från föregående exempel är:
Namn | Typ | Värde |
---|---|---|
totalAge | heltal | 18 |
totalAgeAdd1 | heltal | 19 |
oddAge | heltal | 7 |
totalAge summerar hundarnas ålder; totalAgeAdd1 har ett initialt värde på 1 och lägger till alla hundåldrarna till de inledande värdena. oddAge summerar åldrarna på hundar som finns vid jämna index, särskilt 5 (Evie) och 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'))))]"
}
}
}
Utdata från föregående exempel är:
Namn | Typ | Värde |
---|---|---|
reduceObjectUnion | objekt | {"foo":123,"bar":456,"baz":789} |
Union-funktionen returnerar ett enskilt objekt med alla element från parametrarna. Funktionsanropet unioniserar nyckelvärdeparen för objekten till ett nytt objekt.
sortera
sort(inputArray, lambda function)
Sorterar en matris med en anpassad sorteringsfunktion.
Använd sorteringsfunktionen i Bicep.
Parametrar
Parameter | Obligatoriskt | Type | Beskrivning |
---|---|---|---|
inputArray | Ja | matris | Matrisen som ska sorteras. |
lambda-funktion | Ja | Uttryck | Lambda-funktionen som används för att jämföra två matriselement för beställning. Om det är sant sorteras det andra elementet efter det första i utdatamatrisen. |
Returvärde
En matris.
Exempel
I följande exempel visas hur du sort
använder funktionen.
{
"$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)))]"
}
}
}
Utdata från föregående exempel sorterar hundobjekten från den yngsta till den äldsta:
Namn | Typ | Värde |
---|---|---|
dogsByAge | Matris | [{"name":"Indy","age":2,"interests":["Butter"]},{"name":"Casper","age":3,"interests":["Other dogs"]},{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}] |
toObject
toObject(inputArray, lambda function, [lambda function])
Konverterar en matris till ett objekt med en anpassad nyckelfunktion och valfri funktion för anpassat värde. Se objekt om att konvertera ett objekt till en matris.
I Bicep använder du funktionen toObject .
Parametrar
Parameter | Obligatoriskt | Type | Beskrivning |
---|---|---|---|
inputArray | Ja | matris | Matrisen som används för att skapa ett objekt. |
lambda-funktion | Ja | Uttryck | Lambda-funktionen som används för att ange nyckelpredikatet. |
lambda-funktion | Nej | Uttryck | Lambda-funktionen som används för att ange värdepredikatet. |
Returvärde
Ett objekt.
Exempel
I följande exempel visas hur du toObject
använder funktionen med de två obligatoriska parametrarna:
{
"$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))]"
}
}
}
Föregående exempel genererar ett objekt baserat på en matris.
Namn | Typ | Värde |
---|---|---|
dogsObject | Objekt | {"Evie":{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},"Casper":{"name":"Casper","age":3,"interests":["Other dogs"]},"Indy":{"name":"Indy","age":2,"interests":["Butter"]},"Kira":{"name":"Kira","age":8,"interests":["Rubs"]}} |
Följande toObject
funktion med den tredje parametern ger samma utdata.
"outputs": {
"dogsObject": {
"type": "object",
"value": "[toObject(variables('dogs'), lambda('entry', lambdaVariables('entry').name), lambda('entry', lambdaVariables('entry')))]"
}
}
I följande exempel visas hur du toObject
använder funktionen med tre parametrar.
{
"$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))]"
}
}
}
Föregående exempel genererar ett objekt baserat på en matris.
Namn | Typ | Värde |
---|---|---|
dogsObject | Objekt | {"Evie":{"age":5,"interests":["Ball","Frisbee"]},"Casper":{"age":3,"interests":["Other dogs"]},"Indy":{"age":2,"interests":["Butter"]},"Kira":{"age":8,"interests":["Rubs"]}} |