F#按索引排序

Ala*_*bra 5 f#

假设我有两个列表:

let listOfValues = [100..105]   //can be list of strings or whatever
let indexesToSortBy = [1;2;0;4;5;3]
Run Code Online (Sandbox Code Playgroud)

现在我需要listOfValues_sorted:102;100;101;105;103;104

它可以通过zip"转换"到Tuple 来完成:

let listOfValues_sorted = listOfValues 
                        |> Seq.zip indexesToSortBy
                        |> Seq.sortBy( fun x-> fst x)
                        |> Seq.iter(fun c ->  printfn "%i" (snd c))
Run Code Online (Sandbox Code Playgroud)

但我想,有更好的解决方案吗?

rob*_*kuz 6

我认为你的解决方案非常接近.我会这样做的

let listOfValues_sorted = 
    listOfValues 
    |> Seq.zip indexesToSortBy
    |> Seq.sortBy fst
    |> Seq.toList
    |> List.unzip
    |> List.head
Run Code Online (Sandbox Code Playgroud)

你可以fun x -> fst x简单地崩溃fst.然后unzip得到你想要的列表