【问题标题】:F# convert Array2 into a listF# 将 Array2 转换为列表
【发布时间】:2009-03-15 17:35:57
【问题描述】:

我还是函数式编程的新手,所以如果我不知道如何做某事,我会恢复为程序风格。我找到了一种不必转换为列表的方法,但我仍然想知道如何。

这是我将二维数组转换为列表的尝试。

let board = Array2.init 10 20 (fun i j -> pull(i, j))

let mutable pieces = []

board
|> Array2.mapi (fun i j a -> transform(i, j, a))
|> Array2.iter (fun a -> (pieces <- a :: pieces))

【问题讨论】:

标签: list f#


【解决方案1】:

显然,在 .Net 中,多维数组是 IEnumerable(非泛型),因此这是可行的:

let a2 = Array2.init 2 3 (fun x y -> (x+1)*(y+1))
let l = a2 |> Seq.cast<int> |> Seq.fold (fun l n -> n :: l) []
printfn "%A" l

编辑:正如诺多林在评论中指出的那样,这更好:

let l = a2 |> Seq.cast<int> |> Seq.toList

【讨论】:

  • 很好的解决方案...我刚刚删除了我的,因为它稍微复杂一些。不过我不妨指出,第二行可以简化为: let l = a2 |> Seq.cast |> Seq.to_list
  • 太棒了,谢谢,我想我可以用 IEnumerable 做一些事情,但我不知道该怎么做。
  • 它的 Seq.toList 不是 Seq.to_list.. (无法编辑,因为 SO 说:Edits must be at least 6 characters,非常感谢 SO.. :/)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多