如何快速交换Erlang列表中的两个元素?例如,我有列表:[1,2,3,4],如何快速获得[1,3,2,4]?
[1,2,3,4]
[1,3,2,4]
svgewumm1#
您在问题中没有说您希望如何指定要交换哪两个元素。如果您只想交换列表中位置2和位置3的元素(如示例中所示):
swap23([A,B,C|Rest]) -> [A,C,B|Rest].
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].
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]
3条答案
按热度按时间svgewumm1#
您在问题中没有说您希望如何指定要交换哪两个元素。
如果您只想交换列表中位置2和位置3的元素(如示例中所示):
wb1gzix02#
如果你想交换任何一个索引,你可以做以下的事情
zrfyljdw3#
使用这段代码,您只需遍历列表一次。
用法示例: