如何将元组列表拆分为列表元组?
How split list of tuples to tuple of lists?
我被要求按以下方式将元组列表拆分为具有 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)).
它没有编译,我得到的错误是:语法错误之前:'|'
问题出在哪里?:
您缺少外花括号。另外,将 |
替换为 ,
,因为这是用来分隔元组成员的。
splitter([]) -> {[],[]};
splitter(L) -> {(map (fun ({A, _}) -> A end, L)),
(map (fun ({_, B}) -> B end, L))
}.
不需要空列表子句。您也可以使用列表理解。
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]}
我被要求按以下方式将元组列表拆分为具有 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)).
它没有编译,我得到的错误是:语法错误之前:'|'
问题出在哪里?:
您缺少外花括号。另外,将 |
替换为 ,
,因为这是用来分隔元组成员的。
splitter([]) -> {[],[]};
splitter(L) -> {(map (fun ({A, _}) -> A end, L)),
(map (fun ({_, B}) -> B end, L))
}.
不需要空列表子句。您也可以使用列表理解。
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]}