Bagikan melalui


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(), dan toObject().
  • 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