【问题标题】:How to sort a list in ascending or descending order?如何按升序或降序对列表进行排序?
【发布时间】:2018-05-03 02:20:00
【问题描述】:

有没有办法按升序或降序对列表的所有元素进行排序?

> List1 = [4,3,2,6,1,5].
> sort(List1) == [1,2,3,4,5,6]
> true

【问题讨论】:

  • lists:sort(List1)?如果您搜索“erlang 排序列表”,则该函数的文档是第一个结果。
  • 哎呀,谢谢。 erlang 的文档不适合初学者
  • @P.Soutzikevich 在您了解 OTP 项目本身的结构之前,文档站点有点尴尬。我记得很早就非常沮丧。既然我知道导航它们的方法很简单,而且我不记得如何到达的任何模块,我都会在任何搜索引擎上进行搜索并立即获得该页面。 但这个故事有一个美好的结局。 Erlang 的核心文档非常 非常详尽,并且确实是您需要知道如何真正灵活使用该语言的所有内容(大多数语言并非如此)。为这样的力量付出很小的代价。浏览 stlib 和 'erlang' 文档一次。
  • @zwq9 谢谢!在我掌握了窍门之后,我的 erlang 技能得到了极大的提高。

标签: list sorting erlang


【解决方案1】:
lists:sort([2,3,6,5,1,7,13,4]).

lists:sort(ListToSort).

将返回一个按升序排列的整数列表。感谢@Dogbert 指出显而易见的事情。

【讨论】:

    【解决方案2】:

    我们有很多分类方法,所以有时您可以自己做。这是我学习 Erlang 的方式 :)

    -spec sort(List) -> SortedList when
      List :: [integer()],
      SortedList :: [integer()].
    sort([Pivot | Tail]) ->
    {Smaller, Larger} = partition(Pivot, Tail, [], []),
    sort(Smaller) ++ [Pivot] ++ sort(Larger);
    sort([]) -> [].
    
    partition(Check, [Head | Tail], Smaller, Larger) ->
        case Head =< Check of
            true -> partition(Check, Tail, [Head | Smaller], Larger);
            false -> partition(Check, Tail, Smaller, [Head | Larger])
        end;
    partition(_, [], Smaller, Larger) -> {Smaller, Larger}.
    

    【讨论】:

      猜你喜欢
      • 2016-10-18
      • 2020-11-09
      • 2017-06-10
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      相关资源
      最近更新 更多