Fungsi Lambda untuk templat ARM
Artikel ini menjelaskan fungsi lambda untuk digunakan dalam templat ARM. Fungsi Lambda pada dasarnya adalah blok kode yang dapat diteruskan sebagai argumen. Mereka dapat mengambil beberapa parameter, tetapi dibatasi untuk satu baris kode. Dalam Bicep, ekspresi lambda dalam format ini:
lambda(<lambda variable>, [<lambda variable>, ...], <expression>)
Tip
Kami merekomendasikan Bicep karena menawarkan kemampuan yang sama dengan templat ARM dan sintaksnya lebih mudah digunakan. Untuk mempelajari selengkapnya, lihat fungsi penyebaran.
Batasan
Fungsi lambda templat ARM memiliki batasan ini:
- Ekspresi Lambda hanya dapat ditentukan secara langsung sebagai argumen fungsi dalam fungsi-fungsi ini:
filter()
, ,groupBy()
,map()
mapValues()
,reduce()
,sort()
, dantoObject()
. - Menggunakan variabel lambda (variabel sementara yang digunakan dalam fungsi lambda) di dalam akses array sumber daya atau modul saat ini tidak didukung.
- Menggunakan variabel lambda di
listKeys
dalam fungsi saat ini tidak didukung. - Menggunakan variabel lambda di dalam fungsi referensi saat ini tidak didukung.
filter
filter(inputArray, lambda function)
Memfilter array dengan fungsi pemfilteran kustom.
Di Bicep, gunakan fungsi filter .
Parameter
Parameter | Wajib | Tipe | Deskripsi |
---|---|---|---|
inputArray | Ya | array | Array yang akan difilter. |
fungsi lambda | Ya | expression | Fungsi lambda diterapkan ke setiap elemen array input. Jika false, item difilter dari array output. |
Nilai hasil
Array.
Contoh
Contoh berikut menunjukkan cara menggunakan filter
fungsi .
{
"$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'))))]"
}
}
}
Output dari contoh sebelumnya:
Nama | Jenis | Nilai |
---|---|---|
oldDogs | Array | [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}] |
dogNameIndex | Array | [{"name":"Casper","age":3,"interests":["Other dogs"]}] |
oldDogs mencantumkan anjing yang berusia lima atau lebih; dogNameIndex mengidentifikasi anjing yang jumlah indeksnya kurang dari dua dan yang namanya dimulai dengan huruf "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))))]"
}
}
}
Output dari contoh sebelumnya:
Nama | Jenis | Nilai |
---|---|---|
filteredLoop | Array | [6, 7, 8, 9] |
isEven | Array | [0, 2, 4, 6, 8] |
filterdLoop menunjukkan angka dalam array yang lebih besar dari 5; dan isEven menunjukkan angka genap dalam array.
groupBy
groupBy(inputArray, lambda expression)
Membuat objek dengan nilai array dari array, menggunakan kondisi pengelompokan.
Di Bicep, gunakan fungsi groupBy .
Parameter
Parameter | Wajib | Tipe | Deskripsi |
---|---|---|---|
inputArray | Ya | array | Array untuk pengelompokan. |
Ekspresi Lambda | Ya | expression | Ekspresi lambda diterapkan ke setiap elemen array input, dan mengelompokkan elemen menggunakan kondisi pengelompokan. |
Nilai hasil
Sebuah objek.
Contoh
Contoh berikut menunjukkan cara menggunakan fungsi groupBy
.
{
"$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)))]"
}
}
}
Output dari contoh sebelumnya menunjukkan anjing yang berusia lima atau lebih tua:
Nama | Jenis | Nilai |
---|---|---|
outObject | Objek | {"f":["foo"],"b":["bar","baz"]} |
outObject memperlihatkan objek yang mengelompokkan elemen array berdasarkan huruf pertamanya.
peta
map(inputArray, lambda function)
Menerapkan fungsi pemetaan kustom ke setiap elemen array.
Di Bicep, gunakan fungsi peta .
Parameter
Parameter | Wajib | Tipe | Deskripsi |
---|---|---|---|
inputArray | Ya | array | Array yang akan dipetakan. |
fungsi lambda | Ya | expression | Fungsi lambda diterapkan ke setiap elemen array input, untuk menghasilkan array output. |
Nilai hasil
Array.
Contoh
Contoh berikut menunjukkan cara menggunakan fungsi map
.
{
"$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)))]"
}
}
}
Output dari contoh sebelumnya adalah:
Nama | Jenis | Nilai |
---|---|---|
dogNames | Array | ["Evie","Casper","Indy","Kira"] |
sayHi | Array | ["Hello Evie!","Hello Casper!","Hello Indy!","Hello Kira!"] |
mapArray | Array | [{"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!"}] |
mapArrayIndex | Array | [{"index":0,"val":"Evie"},{"index":1,"val":"Casper"},{"index":2,"val":"Indy"},{"index":3,"val":"Kira"}] |
dogNames menunjukkan nama anjing dari array objek; sayHi menggabungkan "Halo" dan masing-masing nama anjing; mapArray dan mapArrayIndex membuat dua array objek lainnya.
mapValues
mapValues(inputObject, lambda expression)
Membuat objek dari objek input, menggunakan ekspresi lambda untuk memetakan nilai.
Di Bicep, gunakan fungsi mapValues .
Parameter
Parameter | Wajib | Tipe | Deskripsi |
---|---|---|---|
inputObject | Ya | object | Objek yang akan dipetakan. |
Ekspresi Lambda | Ya | expression | Ekspresi lambda yang digunakan untuk memetakan nilai. |
Nilai hasil
Sebuah objek.
Contoh
Contoh berikut menunjukkan cara menggunakan fungsi mapValues
.
{
"$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'))))]"
}
}
}
Output dari contoh sebelumnya adalah:
Nama | Jenis | Nilai |
---|---|---|
mapObject | Objek | {foo: 'FOO', bar: 'BAR'} |
mapObject membuat objek lain dengan nilai dalam huruf besar.
reduce
reduce(inputArray, initialValue, lambda function)
Mengurangi array dengan fungsi pengurangan kustom.
Di Bicep, gunakan fungsi pengurangan.
Parameter
Parameter | Wajib | Tipe | Deskripsi |
---|---|---|---|
inputArray | Ya | array | Array yang akan dikurangi. |
initialValue | Ya | any | Nilai awal. |
fungsi lambda | Ya | expression | Fungsi lambda yang digunakan untuk mengagregasi nilai saat ini dan nilai berikutnya. |
Nilai hasil
Setiap.
Contoh
Contoh berikut menunjukkan cara menggunakan reduce
fungsi .
{
"$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'))))]"
}
}
}
Output dari contoh sebelumnya adalah:
Nama | Jenis | Nilai |
---|---|---|
totalAge | int | 18 |
totalAgeAdd1 | int | 19 |
oddAge | int | 7 |
totalAge menjumlahkan usia anjing; totalAgeAdd1 memiliki nilai awal 1, dan menambahkan semua usia anjing ke nilai awal. oddAge menjumlahkan usia anjing yang terletak pada indeks genap, khususnya 5 (Evie) dan 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'))))]"
}
}
}
Output dari contoh sebelumnya adalah:
Nama | Jenis | Nilai |
---|---|---|
reduceObjectUnion | object | {"foo":123,"bar":456,"baz":789} |
Fungsi union mengembalikan satu objek dengan semua elemen dari parameter. Panggilan fungsi menyarangkan pasangan nilai kunci objek ke dalam objek baru.
urutkan
sort(inputArray, lambda function)
Mengurutkan array dengan fungsi pengurutan kustom.
Di Bicep, gunakan fungsi pengurutan.
Parameter
Parameter | Wajib | Tipe | Deskripsi |
---|---|---|---|
inputArray | Ya | array | Array yang akan diurutkan. |
fungsi lambda | Ya | expression | Fungsi lambda digunakan untuk membandingkan dua elemen array untuk pemesanan. Jika true, elemen kedua akan diurutkan setelah yang pertama dalam array output. |
Nilai hasil
Array.
Contoh
Contoh berikut menunjukkan cara menggunakan fungsi sort
.
{
"$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)))]"
}
}
}
Output dari contoh sebelumnya mengurutkan objek anjing dari yang termuda ke yang tertua:
Nama | Jenis | Nilai |
---|---|---|
dogsByAge | Array | [{"name":"Indy","age":2,"interests":["Butter"]},{"name":"Casper","age":3,"interests":["Other dogs"]},{"name":"Casper","age":3,"interests":["Other dogs"]},{"name":"Casper","age":3,"interests":["Other dogs"]},{"name":"Casper","age":3,"interests":["Other dogs"]},{"name":"Casper","age":3,"interests":["Other dogs"]},{"name":"Cas name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}] |
toObject
toObject(inputArray, lambda function, [lambda function])
Mengonversi array ke objek dengan fungsi kunci kustom dan fungsi nilai kustom opsional. Lihat item tentang mengonversi objek menjadi array.
Di Bicep, gunakan fungsi toObject .
Parameter
Parameter | Wajib | Tipe | Deskripsi |
---|---|---|---|
inputArray | Ya | array | Array yang digunakan untuk membuat objek. |
fungsi lambda | Ya | expression | Fungsi lambda yang digunakan untuk memberikan predikat kunci. |
fungsi lambda | No | expression | Fungsi lambda yang digunakan untuk memberikan predikat nilai. |
Nilai hasil
Sebuah objek.
Contoh
Contoh berikut menunjukkan cara menggunakan toObject
fungsi dengan dua parameter yang diperlukan:
{
"$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))]"
}
}
}
Contoh sebelumnya menghasilkan objek berdasarkan array.
Nama | Jenis | Nilai |
---|---|---|
dogsObject | Objek | {"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"]}} |
Fungsi berikut toObject
dengan parameter ketiga menyediakan output yang sama.
"outputs": {
"dogsObject": {
"type": "object",
"value": "[toObject(variables('dogs'), lambda('entry', lambdaVariables('entry').name), lambda('entry', lambdaVariables('entry')))]"
}
}
Contoh berikut menunjukkan cara menggunakan toObject
fungsi dengan tiga parameter.
{
"$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))]"
}
}
}
Contoh sebelumnya menghasilkan objek berdasarkan array.
Nama | Jenis | Nilai |
---|---|---|
dogsObject | Objek | {"Evie":{"age":5,"interests":["Ball","Frisbee"]},"Casper":{"age":3,"interests":["Anjing lainnyas"]},"Indy":{"age":2,"interests":["Butter"]},"Kira":{"age":8,"interests":["Rubs"]}} |
Langkah berikutnya
- Lihat Fungsi templat - array untuk fungsi templat terkait array lainnya.