Erlang交换列表中的两个元素

i1icjdpr  于 2022-12-16  发布在  Erlang
关注(0)|答案(3)|浏览(230)

如何快速交换Erlang列表中的两个元素?
例如,我有列表:[1,2,3,4],如何快速获得[1,3,2,4]

svgewumm

svgewumm1#

您在问题中没有说您希望如何指定要交换哪两个元素。
如果您只想交换列表中位置2和位置3的元素(如示例中所示):

swap23([A,B,C|Rest]) ->
     [A,C,B|Rest].
wb1gzix0

wb1gzix02#

如果你想交换任何一个索引,你可以做以下的事情

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].
zrfyljdw

zrfyljdw3#

使用这段代码,您只需遍历列表一次。

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]

相关问题