如何在Erlang列表中快速交换两个元素?
例如我有列表:[1,2,3,4]
,如何快速获取[1,3,2,4]
?
答案 0 :(得分:4)
您没有在问题中说明如何指定要交换的两个元素。
如果您只想交换列表中位置2和3的元素(如示例所示):
swap23([A,B,C|Rest]) ->
[A,C,B|Rest].
答案 1 :(得分:1)
如果您希望将任何索引与另一个索引交换,您可以执行以下操作
swap(List,S1,S2) -> {List2,[F|List3]} = lists:split(S1-1,List),
LT = List2++[lists:nth(S2,List)|List3],
{List4,[_|List5]} = lists:split(S2-1,LT),
List4++[F|List5].
答案 2 :(得分:1)
使用此代码,您只需遍历列表一次。
swap(A, B, List) ->
{P1, P2} = {min(A,B), max(A,B)},
{L1, [Elem1 | T1]} = lists:split(P1-1, List),
{L2, [Elem2 | L3]} = lists:split(P2-P1-1, T1),
lists:append([L1, [Elem2], L2, [Elem1], L3]).
用法示例:
1> swap(6,2,[1,2,3,4,5,6,7,8]).
[1,6,3,4,5,2,7,8]