Udostępnij za pośrednictwem


Funkcje lambda dla Bicep

W tym artykule opisano funkcje lambda do użycia w Bicep. Wyrażenia lambda (lub funkcje lambda) są zasadniczo blokami kodu, które mogą być przekazywane jako argument. Mogą przyjmować wiele parametrów, ale są ograniczone do jednego wiersza kodu. W wyrażeniu lambda w języku Bicep ma następujący format:

<lambda variable> => <expression>

Uwaga

Funkcje lambda są obsługiwane tylko w interfejsie wiersza polecenia Bicep w wersji 0.10.X lub nowszej.

Ograniczenia

Funkcja lambda Bicep ma następujące ograniczenia:

  • Wyrażenie lambda można określić tylko bezpośrednio jako argumenty funkcji w tych funkcjach: filter(), , , mapValues()groupBy()reduce()map(), sort(), i .toObject()
  • Używanie zmiennych lambda (zmiennych tymczasowych używanych w wyrażeniach lambda) w dostępie do zasobów lub tablicy modułów nie jest obecnie obsługiwane.
  • Używanie zmiennych lambda wewnątrz listKeys funkcji nie jest obecnie obsługiwane.
  • Używanie zmiennych lambda wewnątrz funkcji referencyjnej nie jest obecnie obsługiwane.

filtr

filter(inputArray, lambda expression)

Filtruje tablicę za pomocą niestandardowej funkcji filtrowania.

Przestrzeń nazw: sys.

Parametry

Parametr Wymagania Type Opis
inputArray Tak tablica Tablica do filtrowania.
wyrażenie lambda Tak wyrażenie Wyrażenie lambda jest stosowane do każdego elementu tablicy wejściowej. Jeśli wynik ma wartość true, element jest uwzględniony w tablicy wyjściowej; w przeciwnym razie element zostanie odrzucony.

Wartość zwracana

Tablicy.

Przykłady

W poniższych przykładach pokazano, jak używać filter funkcji.

var dogs = [
  {
    name: 'Evie'
    age: 5
    interests: ['Ball', 'Frisbee']
  }
  {
    name: 'Casper'
    age: 3
    interests: ['Other dogs']
  }
  {
    name: 'Indy'
    age: 2
    interests: ['Butter']
  }
  {
    name: 'Cira'
    age: 8
    interests: ['Rubs']
  }
]

output oldDogs array = filter(dogs, dog => dog.age >=5)
output dogNameIndex array = filter(dogs, (val, i) => i < 2 && substring(val.name, 0, 1) == 'C')

Dane wyjściowe z poprzedniego przykładu:

Nazwisko Typ Wartość
oldDogs Tablica [{"name":"Evie","age":5,"interests"::"Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}]
dogNameIndex Tablica [{"name":"Casper","age":3,"interests":["Other dogs"]}]

oldDogs wymienia psy, które są pięć lub starsze; dogNameIndex identyfikuje psy, których numer indeksu jest mniejszy niż dwa i którego nazwa zaczyna się literą "C".

var itemForLoop = [for item in range(0, 10): item]

output filteredLoop array = filter(itemForLoop, i => i > 5)
output isEven array = filter(range(0, 10), i => 0 == i % 2)

Dane wyjściowe z poprzedniego przykładu:

Nazwisko Typ Wartość
filteredLoop Tablica [6, 7, 8, 9]
Iseven Tablica [0, 2, 4, 6, 8]

filterdLoop pokazuje liczby w tablicy, które są większe niż 5; i isEven pokazuje liczby parzystych w tablicy.

Groupby

groupBy(inputArray, lambda expression)

Tworzy obiekt z wartościami tablicy z tablicy przy użyciu warunku grupowania.

Przestrzeń nazw: sys.

Parametry

Parametr Wymagania Type Opis
inputArray Tak tablica Tablica do grupowania.
wyrażenie lambda Tak wyrażenie Wyrażenie lambda jest stosowane do każdego elementu tablicy wejściowej i grupuje elementy przy użyciu warunku grupowania.

Wartość zwracana

Obiekt .

Przykłady

W poniższym przykładzie pokazano, jak używać groupBy funkcji.

var inputArray = ['foo', 'bar', 'baz']

output outObject object = groupBy(inputArray, x => substring(x, 0, 1)) 

Dane wyjściowe z poprzedniego przykładu:

Nazwisko Typ Wartość
outObject Objekt {"f":["foo"],"b":["bar","baz"]}

obiekt outObject przedstawia obiekt, który grupuje elementy tablicy według pierwszych liter.

map

map(inputArray, lambda expression)

Stosuje funkcję mapowania niestandardowego do każdego elementu tablicy.

Przestrzeń nazw: sys.

Parametry

Parametr Wymagania Type Opis
inputArray Tak tablica Tablica do mapowania.
wyrażenie lambda Tak wyrażenie Wyrażenie lambda zastosowane do każdego elementu tablicy wejściowej w celu wygenerowania tablicy wyjściowej.

Wartość zwracana

Tablicy.

Przykład

W poniższym przykładzie pokazano, jak używać map funkcji.

var 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']
  }
]

output dogNames array = map(dogs, dog => dog.name)
output sayHi array = map(dogs, dog => 'Hello ${dog.name}!')
output mapArray array = map(range(0, length(dogs)), i => {
  i: i
  dog: dogs[i].name
  greeting: 'Ahoy, ${dogs[i].name}!'
})
output mapArrayIndex array = map(dogs, (x, i) => { index: i, val: x.name})

Dane wyjściowe z poprzedniego przykładu to:

Nazwisko Typ Wartość
dogNames Tablica ["Evie","Casper","Indy","Kira"]
sayHi Tablica ["Hello Evie!","Hello Casper!","Hello Indy!","Hello Kira!"]
mapArray Tablica [{"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 Tablica [{"index":0,"val":"Evie"},{"index":1,"val":"Casper"},{"index":2,"val":"Indy"},{"index":3,"val":"Kira"}]

dogNames pokazuje nazwy psów z tablicy obiektów; sayHi łączy "Hello" i każde z imion psów; mapArray i mapArrayIndex tworzą kolejne dwie tablice obiektów.

mapValues

mapValues(inputObject, lambda expression)

Tworzy obiekt z obiektu wejściowego przy użyciu wyrażenia lambda do mapowania wartości.

Przestrzeń nazw: sys.

Parametry

Parametr Wymagania Type Opis
inputObject Tak obiekt Obiekt do mapowania.
wyrażenie lambda Tak wyrażenie Wyrażenie lambda używane do mapowania wartości.

Wartość zwracana

Obiekt .

Przykład

W poniższym przykładzie pokazano, jak używać mapValues funkcji.

var inputObject = { foo: 'foo', bar: 'bar' }

output mapObject object = mapValues(inputObject, val => toUpper(val)) 

Dane wyjściowe z poprzedniego przykładu to:

Nazwisko Typ Wartość
mapObject Objekt {foo: 'FOO', bar: 'BAR'}

obiekt mapObject tworzy inny obiekt z wartościami w wielkim przypadku.

Zmniejszyć

reduce(inputArray, initialValue, lambda expression)

Zmniejsza tablicę za pomocą niestandardowej funkcji redukcji.

Przestrzeń nazw: sys.

Parametry

Parametr Wymagania Type Opis
inputArray Tak tablica Tablica do zmniejszenia.
initialValue Tak dowolny Wartość początkowa.
wyrażenie lambda Tak wyrażenie Wyrażenie lambda używane do agregowania bieżącej wartości i następnej wartości.

Wartość zwracana

Wszelki.

Przykład

W poniższych przykładach pokazano, jak używać reduce funkcji.

var 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']
  }
]
var ages = map(dogs, dog => dog.age)
output totalAge int = reduce(ages, 0, (cur, next) => cur + next)
output totalAgeAdd1 int = reduce(ages, 1, (cur, next) => cur + next)
output oddAge int = reduce(ages, 0, (cur, next, i) => (i % 2 == 0) ? cur + next : cur)

Dane wyjściowe z poprzedniego przykładu to:

Nazwisko Typ Wartość
totalAge int 18
totalAgeAdd1 int 19
oddAge int 7

totalAge sumuje wiek psów; totalAgeAdd1 ma początkową wartość 1 i dodaje wszystkie grupy wiekowe psów do początkowych wartości. oddAge sumuje wiek psów, które znajdują się w indeksach parzysłych, w szczególności 5 (Evie) i 2 (Indy).

output reduceObjectUnion object = reduce([
  { foo: 123 }
  { bar: 456 }
  { baz: 789 }
], {}, (cur, next) => union(cur, next))

Dane wyjściowe z poprzedniego przykładu to:

Nazwisko Typ Wartość
reduceObjectUnion obiekt {"foo":123,"bar":456,"baz":789}

Funkcja union zwraca pojedynczy obiekt ze wszystkimi elementami z parametrów. Wywołanie funkcji łączy pary wartości klucza obiektów w nowy obiekt.

sort

sort(inputArray, lambda expression)

Sortuje tablicę za pomocą niestandardowej funkcji sortowania.

Przestrzeń nazw: sys.

Parametry

Parametr Wymagania Type Opis
inputArray Tak tablica Tablica do sortowania.
wyrażenie lambda Tak wyrażenie Wyrażenie lambda używane do porównywania dwóch elementów tablicy do porządkowania. Jeśli wartość true, drugi element zostanie uporządkowany po pierwszym w tablicy wyjściowej.

Wartość zwracana

Tablicy.

Przykład

W poniższym przykładzie pokazano, jak używać sort funkcji.

var 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']
  }
]

output dogsByAge array = sort(dogs, (a, b) => a.age < b.age)

Dane wyjściowe z poprzedniego przykładu sortuje obiekty psów od najmłodszych do najstarszych:

Nazwisko Typ Wartość
dogsByAge Tablica [{"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 expression, [lambda expression])

Konwertuje tablicę na obiekt z funkcją klucza niestandardowego i opcjonalną funkcją wartości niestandardowej. Zobacz elementy dotyczące konwertowania obiektu na tablicę.

Przestrzeń nazw: sys.

Parametry

Parametr Wymagania Type Opis
inputArray Tak tablica Tablica używana do tworzenia obiektu.
wyrażenie lambda Tak wyrażenie Wyrażenie lambda używane do podawania predykatu klucza.
wyrażenie lambda Nie. wyrażenie Wyrażenie lambda używane do podawania predykatu wartości.

Wartość zwracana

Obiekt .

Przykład

W poniższym przykładzie pokazano, jak używać toObject funkcji z dwoma wymaganymi parametrami:

var 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' ]
  }
]

output dogsObject object = toObject(dogs, entry => entry.name)

Powyższy przykład generuje obiekt na podstawie tablicy.

Nazwisko Typ Wartość
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"]}}

Poniższa toObject funkcja z trzecim parametrem udostępnia te same dane wyjściowe.

output dogsObject object = toObject(dogs, entry => entry.name, entry => entry)

W poniższym przykładzie pokazano, jak używać toObject funkcji z trzema parametrami.

var 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' ]
    }
  }
]
output dogsObject object = toObject(dogs, entry => entry.name, entry => entry.properties)

Powyższy przykład generuje obiekt na podstawie tablicy.

Nazwisko Typ Wartość
dogsObject Objekt {"Evie":{"age"::5,"interests":["Ball","Frisbee"]},"Casper":{"age":3,"interests":["Other dogs"]},"Indy":{"age":2,"interests":["Butter"]},"Kira":{"age":8,"interests":["Rubs"]}}

Następne kroki