【问题标题】:Reverse an Array in F#在 F# 中反转数组
【发布时间】:2021-01-18 00:12:05
【问题描述】:

有没有其他方法可以在不使用 array.rev 函数且不复制原始数组的情况下在 F# 中反转数组,可能类似于反转列表的方式。

let rev (lst : List<'T>) =
  let length = List.length lst
  seq { for i in (length-1) .. -1 .. 0 do yield lst.[i] }
  |> Seq.toList

【问题讨论】:

  • 不幸的是,'more beautiful' 非常基于意见。请说明您要解决的问题
  • 只是要求另一种方法来反转数组
  • 不复制是指反转原始数组而不是创建反转数组?
  • 我会通过调用List.rev 函数来反转一个列表。哈哈。 Array.rev 和 List.rev 都是 O(N),任何其他合理的算法也是如此。见docs.microsoft.com/en-us/dotnet/fsharp/language-reference/…

标签: arrays list f# reverse


【解决方案1】:

如果您不想创建新数组,唯一的选择就是改变原始数组的元素。就地改变它们。

要反转,只需将第一个元素与最后一个交换,第二个 - 与倒数第二个交换,依此类推:

let rev arr =
    let len = Array.length arr
    for i in 0..(len/2 - 1) do
        let x = arr.[i]
        arr.[i] <- arr.[len-i-1]
        arr.[len-i-1] <- x
    arr

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多