对于F#数组,有没有简单的方法来返回排序索引以及有序数组?F#从array.sort返回排序索引
就像从MATLAB的sort()
功能?
背景:我来自MATLAB/R,其中操纵阵列上的索引是必要的。
我想重现一些索引功能,并试图能够通过周围指数数组中各种功能的变量。对于这个sort()
函数,一个用法是根据它们中的任何一个将几个对齐的数组排列在一起。
也许有更好的方法来做到这一点?
对于F#数组,有没有简单的方法来返回排序索引以及有序数组?F#从array.sort返回排序索引
就像从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)|]
let sortWithIndex list =
list
|> List.mapi (fun index x -> (x, index))
|> List.sort
(根据F#的版本,List.sort
可能需要像'比较比较功能)。
Array.sort不会返回排序的数组,但会返回'unit'。排序/压缩的顺序也是错误的。 – Dario 2010-03-01 18:55:57
@Dario - Array.sort没有排序,它返回一个新的数组。恰当命名的'Array.sortInPlace'用于对数组进行排序。然而,你是正确的映射和排序顺序是错误的。 – kvb 2010-03-01 19:10:02
我纠正了排序和映射的顺序。我实际上认为OP正在寻找在排序后应用的索引。好吧。现在修复。 @Dario:Array.sort没有排序。 – 2010-03-01 19:11:32