Sdílet prostřednictvím


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