Bardziej ogólne (i prostsze) sposób uzyskiwania podzbiór klucze Map
jest użycie Map.take/2
, które można wykorzystać tak:
map = %{"id" => 1, "name" => "a"}
Map.take(map, ["id"])
> %{"id" => 1}
Jak widać, potrzeba tablicę kluczy i zwraca nową mapę z tylko wybranymi kluczami.
Teraz zastosowanie tej listy jest tak proste, jak użycie mapy, a następnie użycie funkcji mappera w postaci Map.take/2
.Jak już wspomniano, można to zrobić albo za pomocą lambda:
Enum.map(list_with_maps, fn (map) -> Map.take(map, ["id"]) end)
Albo można użyć przechwytywanie:
Enum.map(list_with_maps, &(Map.take(&1, ["id"])))
Spowoduje to utworzenie mapy bardziej pośrednie, ale w większości przypadków, że wygrał” t być problemem, jak Elixir jest całkiem mądry o pamięci ponownego użycia i nie będzie faktycznie tworzyć tych obiektów sporo czasu, unles