Erhalte spezifische Schlüsselwerte in einer Liste von Karten mit Elixir?

8

Als Elixir-Neuling habe ich einige Probleme, den Mustervergleich zu verstehen.

Wenn ich eine Elixir-Datenstruktur wie folgt habe:

%Vor%

Was wäre der beste Weg, Werte aller ID-Felder davon zu erhalten?

    
Jukka Puranen 29.12.2015, 10:18
quelle

4 Antworten

19

Sie können die Liste überlisten und die ID mit Enum.map/ zurückgeben. 2

%Vor%

Sie können dieselbe Funktion mit der Erfassung Betreiber:

%Vor%

Ich schreibe lieber & &1["id"] als &(&1["id"]) , aber die Klammern sind optional.

    
Gazler 29.12.2015, 10:19
quelle
2

Der Vollständigkeit halber für die Antworten zu dieser Frage könnten Sie auch so etwas tun:

%Vor%

Was würde so verwendet werden:

%Vor%

Obwohl ich denke, @ Gazlers Antwort ist die bessere Antwort in diesem Fall.

Oh, und da Sie Pattern Matching ausdrücklich erwähnt haben, würde das auch funktionieren:

%Vor%

Der Anruf wäre genau derselbe; Der Unterschied beim zweiten Ansatz besteht darin, dass eine Musterübereinstimmung verwendet wird, um die Karte in der Argumentliste zu analysieren.

Sie können auch die Argumentliste in dieser Zeile ändern: def get_all_ids([%{"id" => id} = m | tail ]) do zu diesem: def get_all_ids([%{"id" => id} = _m | tail ]) do , nur um die Warnung zu vermeiden, dass m ungenutzt ist.

    
Onorio Catenacci 29.12.2015 13:26
quelle
2

Eine allgemeinere (und einfachere) Möglichkeit, eine Teilmenge der Schlüssel eines Map zu erhalten, ist Map.take/2 , die Sie folgendermaßen verwenden können:

%Vor%

Wie Sie sehen können, benötigt es ein Array von Schlüsseln und gibt eine neue Map mit nur den gewünschten Schlüsseln zurück.

Nun gilt es, dies auf eine Liste anzuwenden, indem Sie einfach eine Map verwenden und dann die Map.take/2 in der Mapper-Funktion verwenden. Wie bereits erwähnt, können Sie dies entweder mit einem Lambda:

tun %Vor%

Oder Sie können eine Aufnahme verwenden:

%Vor%

Dies wird mehr Zwischenlandkarten erstellen, aber in den meisten Situationen wird das kein Problem sein, da Elixir ziemlich schlau über die Wiederverwendung von Speicher ist und diese Objekte nicht wirklich oft erstellen wird, unles

    
Zamith 03.10.2016 11:27
quelle
2

Um den Namen Wert aus der Liste der Karten zu extrahieren

%Vor%     
kopos 25.04.2017 14:37
quelle

Tags und Links