Suche nach einem Wert in der Liste {key, value} in Erlang

7

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?

    
akalenuk 03.06.2012, 11:56
quelle

5 Antworten

10

Das Modul proplists enthält get_value/2 , was genau das ist, was Sie wollen.

    
aronisstav 03.06.2012, 12:15
quelle
10

lists:keyfind/3 tut dies. Hier habe ich es in Ihre find_value/2 Schnittstelle abgebildet:

%Vor%

Pro-Listen können jedoch eine noch bessere Route sein.

    
Emil Vikström 03.06.2012 12:27
quelle
4

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%     
marcelog 03.06.2012 14:13
quelle
2

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: Ссылка

    
jasmad 12.06.2015 21:15
quelle
0
%Vor%     
10 cls 06.02.2016 18:29
quelle

Tags und Links