首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Erlang列表理解查找元素

使用Erlang列表理解查找元素
EN

Stack Overflow用户
提问于 2019-03-13 20:42:25
回答 3查看 128关注 0票数 1

我有一个列表,其中包含一个包含一个列表和一个原子的元组。例如:

代码语言:javascript
运行
复制
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}

EN

回答 3

Stack Overflow用户

发布于 2019-03-14 01:34:51

代码语言:javascript
运行
复制
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}]
票数 2
EN

Stack Overflow用户

发布于 2019-03-13 21:12:29

你可以像下面这样分割你的第二个列表理解:

代码语言:javascript
运行
复制
-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.
票数 0
EN

Stack Overflow用户

发布于 2019-03-14 18:58:18

如果你可以假设aem在某种程度上是独一无二的(至少在每组人中是如此):

代码语言:javascript
运行
复制
 [{[Person], Atom} || {People, Atom} <- List, Person = #{aem := "sara"} <- People].

这将产生以下结果:

代码语言:javascript
运行
复制
[{[#{aem => "sara",age => "12"}],blah}]

但是,为了精确匹配您的预期结果,您只需要从该列表中选择一个元素。你可以使用hd/1来做到这一点(如果你知道你将至少有一个元素,或者你不介意崩溃,如果你没有:

代码语言:javascript
运行
复制
 1> hd([{[Person], Atom} || {People, Atom} <- List, Person = #{aem := "sara"} <- People].
 {[#{aem => "sara",age => "12"}],blah}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55142194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档