我有一个列表,其中包含一个包含一个列表和一个原子的元组。例如:
List = [{[#{aem => "sara",age => "12"},#{aem => "hanna",age => "11"}], blah},
{[#{aem => "han",age => "12"},#{aem => "anna",age => "21"}], blah1}].我希望获取与aem == "sara"匹配的记录,并在结果中包含元组中的第二个元素(在本例中为blah)。
必需的结果:{[#{aem =>"sara",age=>"12"], blah}
发布于 2019-03-14 01:34:51
1> List = [{[#{aem => "sara",age => "12"},#{aem => "hanna",age => "11"}], blah},
1> {[#{aem => "han",age => "12"},#{aem => "anna",age => "21"}], blah1}].
[{[#{aem => "sara",age => "12"},
#{aem => "hanna",age => "11"}],
blah},
{[#{aem => "han",age => "12"},#{aem => "anna",age => "21"}],
blah1}]
2> [ {L, Y} || {X, Y} <- List, L <- [[M || M<-X, maps:get(aem, M) =:= "sara"]], L =/= []].
[{[#{aem => "sara",age => "12"}],blah}]发布于 2019-03-13 21:12:29
你可以像下面这样分割你的第二个列表理解:
-module(foo).
-compile(export_all).
start()->
List = [{[#{aem => "sara",age => "12"},
#{aem => "hanna",age => "11"}], "blah"},
{[#{aem => "han",age => "12"},
#{aem => "anna",age => "21"}], "blah1"}],
listcomp(List).
listcomp([]) -> [];
listcomp([{P, Dir} | T]) ->
case [X || X <- P, maps:get(aem, X) == "sara" ] of
[] -> listcomp(T);
Res -> [{Res, Dir} | listcomp(T)]
end.发布于 2019-03-14 18:58:18
如果你可以假设aem在某种程度上是独一无二的(至少在每组人中是如此):
[{[Person], Atom} || {People, Atom} <- List, Person = #{aem := "sara"} <- People].这将产生以下结果:
[{[#{aem => "sara",age => "12"}],blah}]但是,为了精确匹配您的预期结果,您只需要从该列表中选择一个元素。你可以使用hd/1来做到这一点(如果你知道你将至少有一个元素,或者你不介意崩溃,如果你没有:
1> hd([{[Person], Atom} || {People, Atom} <- List, Person = #{aem := "sara"} <- People].
{[#{aem => "sara",age => "12"}],blah}https://stackoverflow.com/questions/55142194
复制相似问题