如何在 F# 中对数组的切片进行就地排序

fnz*_*nzr 3 sorting f# slice

我想对数组的切片进行排序,但以下代码无法按预期工作:

let arr = [|2; 8; 4; 1|]
Array.sortInPlace arr
printfn "%A" arr //1,2,4,8

let mutable arr2 = [|2; 8; 4; 1|]
Array.sortInPlace arr2.[1..]
printfn "%A" arr2.[1..] //8,4,1. Expected: 1,4,8
printfn "%A" arr2 //2,8,4,1. Expected: 2,1,4,8
Run Code Online (Sandbox Code Playgroud)

mutable关键字没有作用的一种方式或其他。

如何在 F# 中就地对数组的连续部分进行排序?

JL0*_*0PD 5

您可以使用System.MemoryExtensionsSpans. Span 是围绕现有数据的视图,不会创建任何副本。

open System

let ar = [|2; 8; 4; 1|]
ar.AsSpan().Slice(1).Sort() // taking span of array, slicing from 1 index and sort remaining elements
printfn "%A" ar // [|2; 1; 4; 8|]
Run Code Online (Sandbox Code Playgroud)

注意:这仅从 net5 支持