Share via


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-funktionen kan bara anges direkt som funktionsargument i dessa funktioner: filter(), map(), reduce(), sort()och toObject().
  • 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)))]"
    }
  }
}

Utdata från föregående exempel visar de hundar som är fem eller äldre:

Namn Typ Värde
oldDogs Matris [{"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))))]"
    }
  }
}

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.

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)))]"
    },
    "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))))]"
    }
  }
}

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!"]
mapObject 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!}]

dogNames visar hundnamnen från matrisen med objekt; sayHi sammanfogar "Hello" och vart och ett av hundnamnen, och mapObject skapar en annan matris med objekt.

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'))))]"
    }
  }
}

Utdata från föregående exempel är:

Namn Typ Värde
totalAge heltal 18
totalAgeAdd1 heltal 19

totalAge summerar hundarnas ålder; totalAgeAdd1 har ett initialt värde på 1 och lägger till alla hundåldrarna till de inledande värdena.

{
  "$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"]}}

Nästa steg