【发布时间】:2010-03-01 18:36:39
【问题描述】:
对于 F# 数组,是否有一种简单的方法可以将排序索引与排序后的数组一起返回?
喜欢 Matlab 中的 sort() 函数吗?
背景:我来自 matlab/R,在索引上操作数组是必不可少的。
我想重现一些索引函数并尝试能够将索引数组作为变量传递给各种函数。对于这个sort() 函数,一种用法是根据其中的任何一个将多个对齐的数组排序在一起。
也许有更好的方法来做到这一点?
【问题讨论】:
对于 F# 数组,是否有一种简单的方法可以将排序索引与排序后的数组一起返回?
喜欢 Matlab 中的 sort() 函数吗?
背景:我来自 matlab/R,在索引上操作数组是必不可少的。
我想重现一些索引函数并尝试能够将索引数组作为变量传递给各种函数。对于这个sort() 函数,一种用法是根据其中的任何一个将多个对齐的数组排序在一起。
也许有更好的方法来做到这一点?
【问题讨论】:
将 Array.sort 与 Array.mapi 结合使用。
let arr = [| 14;3;11;2 |]
let sortedWithIndex = arr |> Array.mapi (fun x t -> (t,x)) |> Array.sort
printfn "%A" sortedWithIndex
输出
[|(2, 3); (3, 1); (11, 2); (14, 0)|]
【讨论】:
unit。排序/压缩的顺序也是错误的。
Array.sort 没有就地排序,它返回一个新数组。恰当地命名为Array.sortInPlace 用于对数组进行就地排序。但是,您对映射和排序顺序错误的看法是正确的。
let sortWithIndex list =
list
|> List.mapi (fun index x -> (x, index))
|> List.sort
(根据 F# 的版本,List.sort 可能需要一个比较函数,如 `compare )。
【讨论】:
List.sort 不带比较功能(并且由于您的元组的顺序,不需要比较功能)。
List.sortWith。