【问题标题】:Saving the index from a real list从真实列表中保存索引
【发布时间】:2010-11-02 15:00:58
【问题描述】:

我正在尝试声明一个函数sort : real list -> int list * real list,该函数使用mergesort 对列表进行排序,并返回一个int 列表,其中包含预排序的各个数字的原始位置。

也许这个例子会更容易理解:

sort [5.4,7.2,1.5,9.6] = ([2,0,1,3], [1.5,5.4,7.2,9.6]

现在列表的排序很容易,但我很难弄清楚如何让它记住原始位置,然后用它创建一个 int 列表。

帮助?

【问题讨论】:

    标签: list sorting sml


    【解决方案1】:
    1. 创建一个对列表,其中包含原始列表中的每个项目及其索引(您可以使用带有索引列表的 ListPair.zip(您可以使用 List.tabulate 创建)来执行此操作)。李>
    2. 对该列表进行排序。
    3. 使用ListPair.unzip 将排序后的对列表转换为一对列表。

    【讨论】:

    • 如何创建这个索引列表?
    • @Newbie: List.tabulate (length xs) (fn i -> i)xs 是您要排序的列表)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2016-02-03
    相关资源
    最近更新 更多