【问题标题】:Erlang swap two element in listErlang交换列表中的两个元素
【发布时间】:2011-09-02 15:50:58
【问题描述】:

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

例如我有列表:[1,2,3,4],我怎样才能快速得到[1,3,2,4]

【问题讨论】:

  • 你的意思是切换还是替换?
  • 你想交换元素吗?如果您编辑您的问题并添加您希望如何指定要交换哪些元素的信息,我会将这些添加到我的答案中。
  • 在您的示例中,您将元素 2 与元素 3 交换。如果您想替换 2 个元素,能否告诉我们您要替换的 2 个元素到底是什么?
  • 也许您只需要使用元组而不是列表?

标签: list erlang swap


【解决方案1】:

你没有在你的问题中说你想如何指定你想交换哪两个元素。

如果您只想交换列表中位置 2 和 3 的元素(如您的示例中):

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

【讨论】:

    【解决方案2】:

    如果您希望与另一个交换任何索引,您可以执行以下操作

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

    【讨论】:

    • 是的,如果他想交换...我试图编辑问题以使其易于理解,但@shk 坚持他想要替换而不是交换(参见 Q 的 cmets)但没有告诉我们他想用什么代替什么。
    【解决方案3】:

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

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-16
      相关资源
      最近更新 更多