Funkce lambda pro šablony ARM
Tento článek popisuje funkce lambda, které se mají použít v šablonách ARM. Funkce lambda jsou v podstatě bloky kódu, které lze předat jako argument. Můžou mít více parametrů, ale jsou omezeny na jeden řádek kódu. Výraz lambda v bicep je v tomto formátu:
lambda(<lambda variable>, [<lambda variable>, ...], <expression>)
Tip
Doporučujeme Bicep, protože nabízí stejné možnosti jako šablony ARM a syntaxe se snadněji používá. Další informace najdete v tématu Funkce nasazení .
Omezení
Funkce lambda šablony ARM má tato omezení:
- Výraz lambda lze zadat pouze přímo jako argumenty funkce v těchto funkcích:
filter()
,groupBy()
, ,mapValues()
map()
,reduce()
, ,sort()
atoObject()
. - Použití proměnných lambda (dočasných proměnných používaných ve funkcích lambda) v přístupu k prostředkům nebo polím modulů se v současné době nepodporuje.
- Použití proměnných lambda uvnitř
listKeys
funkce se v současné době nepodporuje. - Použití proměnných lambda uvnitř referenční funkce se v současné době nepodporuje.
filter
filter(inputArray, lambda function)
Filtruje pole pomocí vlastní funkce filtrování.
V Bicep použijte funkci filtru .
Parametry
Parametr | Požaduje se | Type | Popis |
---|---|---|---|
inputArray | Ano | pole | Pole, které chcete filtrovat. |
lambda | Ano | výraz | Funkce lambda použitá pro každý vstupní prvek pole. Pokud je false, položka se vyfiltruje z výstupního pole. |
Vrácená hodnota
Pole.
Příklady
Následující příklady ukazují, jak funkci používat filter
.
{
"$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'))))]"
}
}
}
Výstupy z předchozího příkladu:
Name | Typ | Hodnota |
---|---|---|
staréDogs | Pole | [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}] |
dogNameIndex | Pole | [{"name":"Casper","age":3,"interests":["Ostatní psi"]}] |
starýDogs uvádí psy, které jsou pět nebo starší; dogNameIndex identifikuje psy, jejichž číslo indexu je menší než dvě, a jehož název začíná písmenem "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))))]"
}
}
}
Výstup z předchozího příkladu:
Name | Typ | Hodnota |
---|---|---|
filteredLoop | Pole | [6, 7, 8, 9] |
isEven | Pole | [0, 2, 4, 6, 8] |
FilterdLoop zobrazuje čísla v matici větší než 5. Funkce isEven zobrazuje sudá čísla v matici.
Groupby
groupBy(inputArray, lambda expression)
Vytvoří objekt s maticovými hodnotami z pole pomocí podmínky seskupení.
V Bicep použijte funkci groupBy .
Parametry
Parametr | Požaduje se | Type | Popis |
---|---|---|---|
inputArray | Ano | pole | Pole pro seskupení. |
výraz lambda | Ano | výraz | Výraz lambda se použije pro každý vstupní prvek pole a seskupí prvky pomocí podmínky seskupení. |
Vrácená hodnota
Objekt.
Příklady
Následující příklad ukazuje, jak používat groupBy
funkci.
{
"$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)))]"
}
}
}
Výstup z předchozího příkladu ukazuje psy, kteří jsou pět nebo starší:
Name | Typ | Hodnota |
---|---|---|
outObject | Object | {"f":["foo"],"b":["bar","baz"]} |
OutObject zobrazuje objekt, který seskupuje prvky pole podle jejich prvních písmen.
map
map(inputArray, lambda function)
Použije vlastní funkci mapování na každý prvek pole.
V Bicep použijte funkci mapy .
Parametry
Parametr | Požaduje se | Type | Popis |
---|---|---|---|
inputArray | Ano | pole | Pole, které se má mapovat. |
lambda | Ano | výraz | Funkce lambda použitá pro každý vstupní prvek pole, aby se vygenerovalo výstupní pole. |
Vrácená hodnota
Pole.
Příklad
Následující příklad ukazuje, jak používat map
funkci.
{
"$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)))]"
}
}
}
Výstup z předchozího příkladu je:
Name | Typ | Hodnota |
---|---|---|
dogNames | Pole | ["Evie","Casper","Indy","Kira"] |
sayHi | Pole | ["Hello Evie!","Hello Casper!","Hello Indy!","Hello Kira!"] |
mapArray | Pole | [{"i":0,"pes":"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!"}] |
mapArrayIndex | Pole | [{"index":0,"val":"Evie"},{"index":1,"val":"Casper"},{"index":2,"val":"Indy"},{"index":3,"val":"Kira"}] |
dogNames zobrazuje názvy psů z pole objektů; sayHi zřetězí slovo "Hello" a každé jméno psa; mapArray a mapArrayIndex vytvoří další dvě pole objektů.
mapValues
mapValues(inputObject, lambda expression)
Vytvoří objekt ze vstupního objektu pomocí výrazu lambda k mapování hodnot.
V Bicep použijte funkci mapValues .
Parametry
Parametr | Požaduje se | Type | Popis |
---|---|---|---|
inputObject | Ano | objekt | Objekt, který se má mapovat. |
výraz lambda | Ano | výraz | Výraz lambda použitý k mapování hodnot. |
Vrácená hodnota
Objekt.
Příklad
Následující příklad ukazuje, jak používat mapValues
funkci.
{
"$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'))))]"
}
}
}
Výstup z předchozího příkladu je:
Name | Typ | Hodnota |
---|---|---|
mapObject | Object | {foo: 'FOO', bar: 'BAR'} |
mapObject vytvoří další objekt s hodnotami velkými písmeny.
Snížit
reduce(inputArray, initialValue, lambda function)
Zmenšuje pole pomocí vlastní funkce redukce.
V Bicep použijte funkci redukce .
Parametry
Parametr | Požaduje se | Type | Popis |
---|---|---|---|
inputArray | Ano | pole | Pole, které chcete snížit. |
Initialvalue | Ano | jakékoliv | Počáteční hodnota. |
lambda | Ano | výraz | Funkce lambda použitá k agregaci aktuální hodnoty a další hodnoty. |
Vrácená hodnota
Cokoliv.
Příklad
Následující příklady ukazují, jak funkci používat reduce
.
{
"$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'))))]"
}
}
}
Výstup z předchozího příkladu je:
Name | Typ | Hodnota |
---|---|---|
totalAge | int | 18 |
totalAgeAdd1 | int | 19 |
lichá | int | 7 |
totalAge sečte věk psů; totalAgeAdd1 má počáteční hodnotu 1 a sečte všechny věky psů k počátečním hodnotám. Lichá hodnota sečte věk psů, které se nacházejí na sudých indexech, konkrétně 5 (Evie) a 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'))))]"
}
}
}
Výstup z předchozího příkladu je:
Name | Typ | Hodnota |
---|---|---|
reduceObjectUnion | objekt | {"foo":123,"bar":456,"baz":789} |
Funkce sjednocení vrátí jeden objekt se všemi prvky z parametrů. Volání funkce sjednocuje páry klíč-hodnota objektů do nového objektu.
sort
sort(inputArray, lambda function)
Seřadí pole pomocí vlastní funkce řazení.
V bicep použijte funkci řazení .
Parametry
Parametr | Požaduje se | Type | Popis |
---|---|---|---|
inputArray | Ano | pole | Pole, které chcete seřadit. |
lambda | Ano | výraz | Funkce lambda používaná k porovnání dvou prvků pole pro řazení. Pokud je pravda, druhý prvek bude seřazen za prvním ve výstupním poli. |
Vrácená hodnota
Pole.
Příklad
Následující příklad ukazuje, jak používat sort
funkci.
{
"$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)))]"
}
}
}
Výstup z předchozího příkladu seřadí objekty psa od nejstaršího po nejstarší:
Name | Typ | Hodnota |
---|---|---|
psiByAge | Pole | [{"name":"Indy","age":2,"interests":["Butter"]},{"name":"Casper","age":3,"interests":["Ostatní psi"]},{"name ":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}] |
Toobject
toObject(inputArray, lambda function, [lambda function])
Převede pole na objekt s vlastní funkcí klíče a volitelnou vlastní hodnotou. Podívejte se na položky o převodu objektu na pole.
V Bicep použijte funkci toObject .
Parametry
Parametr | Požaduje se | Type | Popis |
---|---|---|---|
inputArray | Ano | pole | Pole použité k vytvoření objektu. |
lambda | Ano | výraz | Funkce lambda použitá k zadání predikátu klíče. |
lambda | No | výraz | Funkce lambda použitá k zadání predikátu hodnoty. |
Vrácená hodnota
Objekt.
Příklad
Následující příklad ukazuje, jak používat toObject
funkci se dvěma požadovanými parametry:
{
"$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))]"
}
}
}
Předchozí příklad vygeneruje objekt založený na poli.
Name | Typ | Hodnota |
---|---|---|
dogsObject | Object | {"Evie":{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},"Casper":{"name":"Casper","age":3,"interests":["Ostatní psi"]},"Indy":{"name":"Indy","age":2,"interests":["Butter"]},"Kira":{"name":"Kira","age":8,"interests":["Rubs"]}} |
Následující toObject
funkce s třetím parametrem poskytuje stejný výstup.
"outputs": {
"dogsObject": {
"type": "object",
"value": "[toObject(variables('dogs'), lambda('entry', lambdaVariables('entry').name), lambda('entry', lambdaVariables('entry')))]"
}
}
Následující příklad ukazuje, jak používat toObject
funkci se třemi parametry.
{
"$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))]"
}
}
}
Předchozí příklad vygeneruje objekt založený na poli.
Name | Typ | Hodnota |
---|---|---|
dogsObject | Object | {"Evie":{"age":5,"interests":["Ball","Frisbee"]},"Casper":{"age":3,"interests":["Ostatní psi"]},"Indy":{"age":2,"interests":["Butter"]},"Kira":{"age":8,"interests":["Rubs"]}} |
Další kroky
- Viz Funkce šablony – pole pro další funkce šablony související s poli.