【问题标题】:How do I build a list of elements extracted from a list of tuples in Erlang?如何构建从 Erlang 中的元组列表中提取的元素列表?
【发布时间】:2014-06-30 19:52:52
【问题描述】:

我有一个包含以下元素的列表:{First, Second} 现在我想构建一个包含第一个列表中每个 First 元素的列表,我该怎么做?

这行得通吗:

List = [L || {First, Second} = FirstList, L <- First].

【问题讨论】:

    标签: list erlang


    【解决方案1】:

    你想要这个:

    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 documentationLearn you Some Erlang 中阅读有关列表推导(和过滤器)的更多信息。

    【讨论】:

    • 太棒了!这是排除包含“FromPid”的元组的正确方法吗:OtherPlayers = [{P, Pid} || {P, Pid}
    【解决方案2】:

    试试这个:

    [L || {L,R} <- FirstList].
    

    【讨论】:

      猜你喜欢
      • 2016-07-12
      • 2018-04-07
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多