Lambda-függvények ARM-sablonokhoz
Ez a cikk az ARM-sablonokban használandó lambdafüggvényeket ismerteti. A Lambda függvények lényegében olyan kódblokkok, amelyek argumentumként átadhatók. Több paramétert is tartalmazhatnak, de egyetlen kódsorra korlátozódnak. A Bicep-ben a lambda kifejezés a következő formátumban van:
lambda(<lambda variable>, [<lambda variable>, ...], <expression>)
Tipp.
A Bicep használatát javasoljuk, mert ugyanazokkal a képességekkel rendelkezik, mint az ARM-sablonok, és a szintaxis használata egyszerűbb. További információkért tekintse meg az üzembehelyezési függvényeket.
Korlátozások
Az ARM-sablon lambda függvénye a következő korlátozásokkal rendelkezik:
- A Lambda függvény csak közvetlenül adható meg függvényargumentumként ezekben a függvényekben:
filter()
,map()
,reduce()
,sort()
éstoObject()
. - A lambda változók (a lambda függvényekben használt ideiglenes változók) erőforrás- vagy modultömb-hozzáférésen belüli használata jelenleg nem támogatott.
- A lambda változók függvényen belüli
listKeys
használata jelenleg nem támogatott. - A lambda változók referenciafüggvényen belüli használata jelenleg nem támogatott.
szűrő
filter(inputArray, lambda function)
Tömb szűrése egyéni szűrési függvénnyel.
A Bicepben használja a szűrőfüggvényt.
Paraméterek
Paraméter | Szükséges | Típus | Leírás |
---|---|---|---|
inputArray | Igen | array | A szűrni kívánt tömb. |
lambda függvény | Igen | Kifejezés | Az egyes bemeneti tömbelemekre alkalmazott lambda függvény. Ha hamis, az elem ki lesz szűrve a kimeneti tömbből. |
Visszaadott érték
Egy tömb.
Példák
Az alábbi példák a függvény használatát filter
mutatják be.
{
"$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)))]"
}
}
}
Az előző példa kimenete az öt vagy annál idősebb kutyákat mutatja be:
Név | Típus | Érték |
---|---|---|
oldDogs | Tömb | [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}] |
{
"$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))))]"
}
}
}
Az előző példa kimenete:
Név | Típus | Érték |
---|---|---|
filteredLoop | Tömb | [6, 7, 8, 9] |
isEven | Tömb | [0, 2, 4, 6, 8] |
a filterdLoop az 5-nél nagyobb tömbben lévő számokat jeleníti meg, az isEven pedig a tömb páros számát.
térkép
map(inputArray, lambda function)
Egyéni leképezési függvényt alkalmaz egy tömb minden elemére.
A Bicepben használja a térképfüggvényt .
Paraméterek
Paraméter | Szükséges | Típus | Leírás |
---|---|---|---|
inputArray | Igen | array | A megfeleltetendő tömb. |
lambda függvény | Igen | Kifejezés | Az egyes bemeneti tömbelemekre alkalmazott lambda függvény a kimeneti tömb létrehozásához. |
Visszaadott érték
Egy tömb.
Példa
Az alábbi példa a függvény használatát map
mutatja be.
{
"$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)))]"
},
"mapObject": {
"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))))]"
}
}
}
Az előző példa kimenete a következő:
Név | Típus | Érték |
---|---|---|
dogNames | Tömb | ["Evie","Casper","Indy","Kira"] |
sayHi | Tömb | ["Hello Evie!","Hello Casper!","Hello Indy!","Hello Kira!"] |
mapObject | Tömb | [{"i":0,"dog":"Evie","greeting":"Ahoy, Evie!},{"i":1,"dog":"Casper","greeting":"Ahoy, Casper!"},{"i":2,"dog":"Indy","greeting":"Ahoy, Indy!"},{"i":3,"dog":"Kira","greeting":"Ahoy, Kira!"}] |
a dogNames az objektumok tömbjének kutyaneveit jeleníti meg; sayHi összefűzi a "Hello" és az egyes kutyanevek; és a mapObject létrehoz egy másik tömb objektumok.
Csökkenti
reduce(inputArray, initialValue, lambda function)
Egyéni csökkentési függvénnyel rendelkező tömbök csökkentése.
A Bicepben használja a csökkentési függvényt.
Paraméterek
Paraméter | Szükséges | Típus | Leírás |
---|---|---|---|
inputArray | Igen | array | A csökkenteni kívánt tömb. |
initialValue | Igen | bármelyik | Kezdeti érték. |
lambda függvény | Igen | Kifejezés | Az aktuális és a következő érték összesítéséhez használt lambda függvény. |
Visszaadott érték
Bármelyiket.
Példa
Az alábbi példák a függvény használatát reduce
mutatják be.
{
"$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'))))]"
}
}
}
Az előző példa kimenete a következő:
Név | Típus | Érték |
---|---|---|
totalAge | egész | 18 |
totalAgeAdd1 | egész | 19 |
totalAge összegzi a kutyák életkorát; A totalAgeAdd1 kezdeti értéke 1, és hozzáadja az összes kutya életkorát a kezdeti értékekhez.
{
"$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'))))]"
}
}
}
Az előző példa kimenete a következő:
Név | Típus | Érték |
---|---|---|
reduceObjectUnion | object | {"foo":123,"bar":456,"baz":789} |
Az egyesítő függvény egyetlen objektumot ad vissza a paraméterek összes elemével együtt. A függvényhívás az objektumok kulcsértékpárjait egy új objektumba egyesíti.
Rendezés
sort(inputArray, lambda function)
Tömb rendezése egyéni rendezési függvénnyel.
A Bicepben használja a rendezési függvényt.
Paraméterek
Paraméter | Szükséges | Típus | Leírás |
---|---|---|---|
inputArray | Igen | array | A rendezendő tömb. |
lambda függvény | Igen | Kifejezés | A lambda függvény két tömbelem összehasonlítására szolgál a rendezéshez. Ha igaz, a második elem a kimeneti tömb első eleme után lesz rendezve. |
Visszaadott érték
Egy tömb.
Példa
Az alábbi példa a függvény használatát sort
mutatja be.
{
"$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)))]"
}
}
}
Az előző példa kimenete a kutyaobjektumokat a legfiatalabbtól a legrégebbiig rendezi:
Név | Típus | Érték |
---|---|---|
dogsByAge | Tömb | [{"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])
Átalakít egy tömböt egy egyéni kulcsfüggvényt és opcionális egyéni értékfüggvényt tartalmazó objektummá. Az objektumok tömbté alakításáról szóló elemek megtekintése.
A Bicepben használja a toObject függvényt .
Paraméterek
Paraméter | Szükséges | Típus | Leírás |
---|---|---|---|
inputArray | Igen | array | Az objektum létrehozásához használt tömb. |
lambda függvény | Igen | Kifejezés | A fő predikátum megadásához használt lambda függvény. |
lambda függvény | Nem | Kifejezés | Az érték predikátumának megadásához használt lambda függvény. |
Visszaadott érték
Egy objektum.
Példa
Az alábbi példa bemutatja, hogyan használhatja a függvényt toObject
a két szükséges paraméterrel:
{
"$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))]"
}
}
}
Az előző példa egy tömbön alapuló objektumot hoz létre.
Név | Típus | Érték |
---|---|---|
dogsObject | Objektum | {"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"]}} |
A következő toObject
függvény a harmadik paraméterrel ugyanazt a kimenetet biztosítja.
"outputs": {
"dogsObject": {
"type": "object",
"value": "[toObject(variables('dogs'), lambda('entry', lambdaVariables('entry').name), lambda('entry', lambdaVariables('entry')))]"
}
}
Az alábbi példa bemutatja, hogyan használható a toObject
függvény három paraméterrel.
{
"$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))]"
}
}
}
Az előző példa egy tömbön alapuló objektumot hoz létre.
Név | Típus | Érték |
---|---|---|
dogsObject | Objektum | {"Evie":{"age":5,"interests":["Ball","Frisbee"]},"Casper":{"age":3,"interests":["Other dogs"]},"Indy":{"age":2,"interests":["Butter"]},"Kira":{"age":8,"interests":["Rubs"]}} |
Következő lépések
- További tömbhöz kapcsolódó sablonfüggvények: Sablonfüggvények – tömbök.