Erlang交换列表中的两个元素

时间:2011-05-26 14:16:36

标签: list erlang swap

如何在Erlang列表中快速交换两个元素?

例如我有列表:[1,2,3,4],如何快速获取[1,3,2,4]

3 个答案:

答案 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]