Delen via


Lambda-functies voor ARM-sjablonen

In dit artikel worden de lambda-functies beschreven die moeten worden gebruikt in ARM-sjablonen. Lambda-functies zijn in wezen blokken code die als argument kunnen worden doorgegeven. Ze kunnen meerdere parameters gebruiken, maar zijn beperkt tot één regel code. In Bicep heeft lambda-expressie deze indeling:

lambda(<lambda variable>, [<lambda variable>, ...], <expression>)

Tip

We raden Bicep aan omdat het dezelfde mogelijkheden biedt als ARM-sjablonen en de syntaxis gemakkelijker te gebruiken is. Zie implementatiefuncties voor meer informatie.

Beperkingen

De lambda-functie van arm-sjabloon heeft deze beperkingen:

  • Lambda-expressie kan alleen rechtstreeks worden opgegeven als functieargumenten in deze functies: filter(), , groupBy()mapValues()map(), , reduce(), , , sort()en .toObject()
  • Het gebruik van lambda-variabelen (de tijdelijke variabelen die worden gebruikt in de lambda-functies) binnen resource- of modulematrixtoegang wordt momenteel niet ondersteund.
  • Het gebruik van lambda-variabelen in de listKeys functie wordt momenteel niet ondersteund.
  • Het gebruik van lambda-variabelen in de referentiefunctie wordt momenteel niet ondersteund.

filter

filter(inputArray, lambda function)

Hiermee filtert u een matrix met een aangepaste filterfunctie.

Gebruik in Bicep de filterfunctie .

Parameters

Parameter Vereist Type Description
inputArray Ja matrix De matrix die moet worden gefilterd.
lambda, functie Ja Expressie De lambda-functie die wordt toegepast op elk invoermatrixelement. Als dit onwaar is, wordt het item uit de uitvoermatrix gefilterd.

Retourwaarde

Een matrix.

Voorbeelden

In de volgende voorbeelden ziet u hoe u de filter functie gebruikt.

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

De uitvoer uit het vorige voorbeeld:

Name Type Weergegeven als
oldDogs Matrix [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interest":["Rubs"]}]
dogNameIndex Matrix [{"name":"Source","age":3,"interest":["Other dogs"]}]

oldDogs vermeldt de honden die vijf of ouder zijn; dogNameIndex identificeert de honden waarvan het indexnummer kleiner is dan twee en waarvan de naam begint met de letter 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))))]"
    }
  }
}

De uitvoer uit het vorige voorbeeld:

Name Type Weergegeven als
filteredLoop Matrix [6, 7, 8, 9]
isEven Matrix [0, 2, 4, 6, 8]

filterdLoop toont de getallen in een matrix die groter is dan 5; en isEven toont de even getallen in de matrix.

groupBy

groupBy(inputArray, lambda expression)

Hiermee maakt u een object met matrixwaarden van een matrix met behulp van een groeperingsvoorwaarde.

Gebruik in Bicep de groupBy-functie .

Parameters

Parameter Vereist Type Description
inputArray Ja matrix De matrix voor groepering.
lambda-expressie Ja Expressie De lambda-expressie wordt toegepast op elk invoermatrixelement en groepeert de elementen met behulp van de groeperingsvoorwaarde.

Retourwaarde

Een object.

Voorbeelden

In het volgende voorbeeld ziet u hoe u de groupBy functie gebruikt.

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

In de uitvoer van het vorige voorbeeld ziet u de honden die vijf of ouder zijn:

Name Type Weergegeven als
outObject Object {"f":["foo"],"b":["bar","baz"]}

outObject toont een object waarmee de matrixelementen worden gegroepeerd op basis van de eerste letters.

map

map(inputArray, lambda function)

Hiermee past u een aangepaste toewijzingsfunctie toe op elk element van een matrix.

Gebruik in Bicep de kaartfunctie .

Parameters

Parameter Vereist Type Description
inputArray Ja matrix De matrix die moet worden toegewezen.
lambda, functie Ja Expressie De lambda-functie die wordt toegepast op elk invoermatrixelement, om de uitvoermatrix te genereren.

Retourwaarde

Een matrix.

Opmerking

In het volgende voorbeeld ziet u hoe u de map functie gebruikt.

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

De uitvoer uit het voorgaande voorbeeld is:

Name Type Weergegeven als
dogNames Matrix ["Evie","Neerkom","Indy","Kira"]
sayHi Matrix ["Hallo Evie!","Hallo Neerkom!","Hallo Indy!","Hallo Kira!"]
mapArray Matrix [{"i":0,"dog":"Evie","greeting":"Ahoy, Evie!},{"i":1,"dog":"Neerkom","begroeting":"Ahoy,Source!"},{"i":2,"dog":"Indy","greeting":"Ahoy, Indy!"},{"i":3,"dog":"Kira","greeting":"Ahoy, Kira!"}]
mapArrayIndex Matrix [{"index":0,"val":"Evie"},{"index":1,"val":"Neerkom"},{"index":2,"val":"Indy"},{"index":3,"val":"Kira"}]

dogNames toont de namen van de honden uit de matrix van objecten; sayHi voegt "Hallo" en elk van de namen van de honden samen; mapArray en mapArrayIndex maken nog twee matrices van objecten.

mapValues

mapValues(inputObject, lambda expression)

Hiermee maakt u een object op basis van een invoerobject met behulp van een lambda-expressie om waarden toe te wijzen.

Gebruik in Bicep de functie mapValues .

Parameters

Parameter Vereist Type Description
inputObject Ja object Het object dat moet worden toegewezen.
lambda-expressie Ja Expressie De lambda-expressie die wordt gebruikt om de waarden toe te wijzen.

Retourwaarde

Een object.

Opmerking

In het volgende voorbeeld ziet u hoe u de mapValues functie gebruikt.

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

De uitvoer uit het voorgaande voorbeeld is:

Name Type Weergegeven als
mapObject Object {foo: 'FOO', balk: 'BAR'}

mapObject maakt een ander object met de waarden in hoofdletters.

Verminderen

reduce(inputArray, initialValue, lambda function)

Vermindert een matrix met een aangepaste reductiefunctie.

Gebruik in Bicep de reductiefunctie .

Parameters

Parameter Vereist Type Description
inputArray Ja matrix De matrix die moet worden verkleind.
initialValue Ja willekeurige Initiële waarde.
lambda, functie Ja Expressie De lambda-functie die wordt gebruikt om de huidige waarde en de volgende waarde samen te voegen.

Retourwaarde

Alle.

Opmerking

In de volgende voorbeelden ziet u hoe u de reduce functie gebruikt.

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

De uitvoer uit het voorgaande voorbeeld is:

Name Type Weergegeven als
totalage int 18
totalAgeAdd1 int 19
oddAge int 7

totalAge telt de leeftijden van de honden op; totalAgeAdd1 heeft een initiële waarde van 1 en voegt alle leeftijden van de hond toe aan de initiële waarden. oddAge telt de leeftijden van honden op die zich op even indexen bevinden, met name 5 (Evie) en 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'))))]"
    }
  }
}

De uitvoer uit het voorgaande voorbeeld is:

Name Type Weergegeven als
reduceObjectUnion object {"foo":123,"bar":456,"baz":789}

De samenvoegfunctie retourneert één object met alle elementen uit de parameters. Met de functie worden de sleutelwaardeparen van de objecten samengevoegd in een nieuw object.

sort

sort(inputArray, lambda function)

Hiermee sorteert u een matrix met een aangepaste sorteerfunctie.

Gebruik in Bicep de sorteerfunctie .

Parameters

Parameter Vereist Type Description
inputArray Ja matrix De matrix die moet worden gesorteerd.
lambda, functie Ja Expressie De lambda-functie die wordt gebruikt om twee matrixelementen te vergelijken voor ordenen. Indien waar, wordt het tweede element na de eerste in de uitvoermatrix geordend.

Retourwaarde

Een matrix.

Opmerking

In het volgende voorbeeld ziet u hoe u de sort functie gebruikt.

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

De uitvoer uit het voorgaande voorbeeld sorteert de hondenobjecten van de jongste naar de oudste:

Name Type Weergegeven als
dogsByAge Matrix [{"name":"Indy","age":2,"interest":["Butter"]},{"name":"Source","age":3,"interest":["Other dogs"]},{"name ":"Evie","age":5,"interest":["Ball","Frisbee"]},{"name":"Kira","age":8,"interest":["Rubs"]}]

Toobject

toObject(inputArray, lambda function, [lambda function])

Converteert een matrix naar een object met een aangepaste sleutelfunctie en optionele aangepaste waardefunctie. Zie items over het converteren van een object naar een matrix.

Gebruik in Bicep de functie toObject .

Parameters

Parameter Vereist Type Description
inputArray Ja matrix De matrix die wordt gebruikt voor het maken van een object.
lambda, functie Ja Expressie De lambda-functie die wordt gebruikt om het sleutelpredicaat op te geven.
lambda, functie Nee Expressie De lambda-functie die wordt gebruikt om het waardepredicaat op te geven.

Retourwaarde

Een object.

Opmerking

In het volgende voorbeeld ziet u hoe u de toObject functie gebruikt met de twee vereiste parameters:

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

In het voorgaande voorbeeld wordt een object gegenereerd op basis van een matrix.

Name Type Weergegeven als
dogsObject Object {"Evie":{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},"Resource":{"name":"Resource","age":3,"interest":["Other dogs"]},,"Indy":{"name":"Indy","age":2,"interest":["Butter"]},"Kira":{"name":"Kira","age":8,"interest":["Rubs"]}}

De volgende toObject functie met de derde parameter biedt dezelfde uitvoer.

"outputs": {
  "dogsObject": {
    "type": "object",
    "value": "[toObject(variables('dogs'), lambda('entry', lambdaVariables('entry').name), lambda('entry', lambdaVariables('entry')))]"
  }
}

In het volgende voorbeeld ziet u hoe u de toObject functie gebruikt met drie parameters.

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

In het voorgaande voorbeeld wordt een object gegenereerd op basis van een matrix.

Name Type Weergegeven als
dogsObject Object {"Evie":{"age":5,"interest":["Ball","Frisbee"]},"Neerkom":{"age":3,"interests":["Other dogs"]},"Indy":{"age":2,"interest":["Butter"]},"Kira":{"age":8,"interest":["Rubs"]}}

Volgende stappen