我想对数组的切片进行排序,但以下代码无法按预期工作:
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# 中就地对数组的连续部分进行排序?
您可以使用System.MemoryExtensions对Spans. 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 支持