【发布时间】:2014-06-30 19:52:52
【问题描述】:
我有一个包含以下元素的列表:{First, Second} 现在我想构建一个包含第一个列表中每个 First 元素的列表,我该怎么做?
这行得通吗:
List = [L || {First, Second} = FirstList, L <- First].
【问题讨论】:
我有一个包含以下元素的列表:{First, Second} 现在我想构建一个包含第一个列表中每个 First 元素的列表,我该怎么做?
这行得通吗:
List = [L || {First, Second} = FirstList, L <- First].
【问题讨论】:
你想要这个:
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 中阅读有关列表推导(和过滤器)的更多信息。
【讨论】:
试试这个:
[L || {L,R} <- FirstList].
【讨论】: