我有一个包含以下元素的列表:{First,Second} 现在我想构建一个包含第一个列表中每个First元素的列表,我该怎么做?
这是否有效:
List = [L || {First, Second} = FirstList, L <- First].
答案 0 :(得分:4)
你想要这个:
Results = [First || {First, _Second} <- List].
它会创建一个First
列表,其中{First, _Second}
来自List
。
我们使用匹配来分解元组。 _Second
上的下划线表示我们不使用它(并禁止发出警告)。您可以使用普通的_
,但我经常使用较长的格式对文档进行排序。
结果列表由所有First
值组成。
你可以在Erlang shell中玩这个东西。要回答您在评论中提出的问题:
1> Players = [{a,1},{b,2},{c,3}].
[{a,1},{b,2},{c,3}]
2> OtherPlayers = [{P,Q} || {P,Q} <- Players, Q =/= 3].
[{a,1},{b,2}]
在这里,我们设置原始列表(我使用原子作为玩家名称,简单整数而不是pids)。然后,我们创建一个新的{P,Q}
元组列表,使{P,Q}
来自原始列表,并使用Q =/= 3
的过滤器。
您可以在Erlang documentation或Learn you Some Erlang中详细了解列表推导(和过滤器)。
答案 1 :(得分:0)
试试这个:
[L || {L,R} <- FirstList].