Ich bin neu bei Erlang und vielleicht habe ich dieses Thema im Tutorial einfach verpasst, obwohl es trivial ist. Nehmen wir an, ich habe eine Liste von {key, Value} -Paaren, die von erlang abgerufen wurden: fun_info / 1. Ich möchte Funktion Arity wissen, der Rest der Liste interessiert mich nicht. Also schreibe ich etwas wie:
%Vor%Und dann:
%Vor%Ich arbeite gut, aber sollte etwas wie find_value eine zu gewöhnliche Routine sein, um es zu schreiben? Ich habe jedoch sein Analogon in BIFs nicht gefunden. Die Frage ist also: gibt es eine schöne elegante Möglichkeit, um einen Wert für einen Schlüssel aus einer Liste von {key, value} Tupeln zu erhalten?
Das Modul proplists
enthält get_value/2
, was genau das ist, was Sie wollen.
lists:keyfind/3
tut dies. Hier habe ich es in Ihre find_value/2
Schnittstelle abgebildet:
Pro-Listen können jedoch eine noch bessere Route sein.
Da Listen: keyfind / 3 bereits veröffentlicht wurde, werde ich eine weitere nützliche Option erwähnen, die lists comprehensions verwendet:
%Vor%Dies bedeutet, dass alle Werte so abgerufen werden, dass jedes Element "Value" ist und aus einem Tupel stammt, das {arity, Value} in List entspricht. Da ein Listenverständnis eine Liste zurückgibt, erhalten wir den Kopf dieser Liste.
Und es in einem Spaß verwenden:
%Vor%proplists: get_value Ist der Weg dazu, wenn es Ihnen egal ist über die Geschwindigkeit
lists: keyfind Es ist die beste Wahl für die Performance, da es sich um ein BIF handelt. Sie können mit einem Element / 2 arbeiten so
%Vor%Und Sie erhalten das gleiche Ergebnis von proplists: get_value aber schneller.
Quelle: Ссылка