【问题标题】:How split list of tuples to tuple of lists?如何将元组列表拆分为列表元组?
【发布时间】:2019-10-20 16:16:02
【问题描述】:

我被要求通过以下方式将元组列表拆分为具有 2 个列表的元组:

splitter ([{1,2},{3,4},{5,6}]). = {[1,3,5],[2,4,6]}

我尝试编写以下代码:

splitter([]) -> {[],[]};
splitter(L) ->(map (fun ({A, _}) -> A end, L))|(map (fun ({_, B}) -> B end, L)).

而且它没有编译,我得到的错误是:语法错误之前:'|'

问题出在哪里?:

【问题讨论】:

    标签: list split erlang tuples


    【解决方案1】:

    您缺少外部花括号。另外,将| 替换为,,因为这是用来分隔元组成员的。

    splitter([]) -> {[],[]};
    splitter(L) -> {(map (fun ({A, _}) -> A end, L)),
                    (map (fun ({_, B}) -> B end, L))
                   }.
    

    【讨论】:

      【解决方案2】:

      空列表子句是不必要的。您也可以使用列表推导。

      splitter(L) -> {[ X || {X, _} <- L], [X || {_, X} <- L]}.
      

      你也可以制作通用的

      splitter_n(L) ->
          list_to_tuple(transpose([tuple_to_list(X) || X <- L])).
      
      transpose([]) -> [];
      transpose([[]|_]) -> [];
      transpose(L) ->
          [[hd(X) || X <- L] | transpose([tl(X) || X <- L])].
      

      工作中

      1> c(splitter).
      {ok,splitter}
      2> splitter:splitter_n([{1,2},{3,4},{5,6}]).
      {[1,3,5],[2,4,6]}
      3> splitter:splitter_n([{1,2,3},{4,5,6},{7,8,9}]).
      {[1,4,7],[2,5,8],[3,6,9]}
      

      【讨论】:

        猜你喜欢
        • 2014-04-27
        • 2017-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-05
        • 2014-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多