BAR*_*BAR 2 erlang zip tuples list
是否有按顺序压缩3个列表的优化方法
zip(L1, L2, L3)
Run Code Online (Sandbox Code Playgroud)
这样它们就会产生一个元组列表,例如:
L1 = [1, 2, 3, 4],
L2 = [a, b, c, d],
L3 = [1, 2, 3, 4],
Run Code Online (Sandbox Code Playgroud)
结果的结果列表应如下所示:
[{1,a,1}, {2,b,2}, {3,c,3}, {4,d,4}]
Run Code Online (Sandbox Code Playgroud)
hdi*_*ima 10
看来你需要使用list:zip3/3:
1> L1 = [1, 2, 3, 4].
[1,2,3,4]
2> L2 = [a, b, c, d].
[a,b,c,d]
3> L3 = [1, 2, 3, 4].
[1,2,3,4]
4> lists:zip3(L1, L2, L3).
[{1,a,1},{2,b,2},{3,c,3},{4,d,4}]
Run Code Online (Sandbox Code Playgroud)
1> lists:zip3([1,2,3,4],[a,b,c,d],[1,2,3,4]).
[{1,a,1},{2,b,2},{3,c,3},{4,d,4}]
2>
Run Code Online (Sandbox Code Playgroud)
或者您可以手动实现它:
myzip3([], _, _) ->
[];
myzip3([X|Xs], [Y|Ys], [Z|Zs]) ->
[{X,Y,Z}|myzip3(Xs,Ys,Zs)].
Run Code Online (Sandbox Code Playgroud)
或使用累加器:
myzip3acc(Xs, Ys, Zs) ->
myzip3acc_do([], Xs, Ys, Zs).
myzip3acc_do(Acc, [], _, _) ->
lists:reverse(Acc);
myzip3acc_do(Acc, [X|Xs], [Y|Ys], [Z|Zs]) ->
myzip3acc_do([{X,Y,Z}|Acc], Xs,Ys,Zs).
Run Code Online (Sandbox Code Playgroud)