f# - 将数组映射到上一个、当前和下一个值的元组数组

标签 f#

映射以下内容的最佳方式是什么:

[|"A"; "B"; "C"; "D"|]

[|("","A","B"); ("A","B","C"); ("B","C","D"); ("C","D","")|]

?

最佳答案

我更喜欢基于惯用组合器的方法:在数组的两端附加一个空字符串,使用 Seq.windowed 3生成三个项目的滑动数组序列,最后将每个序列元素映射到元组并将序列转换回数组:

let conv source =
    Array.concat [[|String.Empty|]; source; [|String.Empty|]] |> Seq.windowed 3
    |> Seq.map (fun x -> x.[0],x.[1],x.[2]) |> Seq.toArray

在 FSI 下测试 conv [|"A";"B";"C";"D"|] 产生:

val it : (string * string * string) [] =
  [|("", "A", "B"); ("A", "B", "C"); ("B", "C", "D"); ("C", "D", "")|]

关于f# - 将数组映射到上一个、当前和下一个值的元组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20754905/

相关文章:

F# 模式匹配异常

r - F#:程序集引用 RDotNet.dll 未找到或无效

ssl - F# 使用隐式 SSL 通过 FTP 下载文本文件

F#友元函数/类

f# - 字典列表与字典序列

unit-testing - F# Assert.AreEquals 因两个文字而失败

macos - 在Mac上以32位模式运行交互式F#

c# - 为什么这个简单的 F# 代码比 C#/C++ 版本慢 36 倍?

list - 在什么情况下 F# 中的列表会被编译器优化?

f# - F# 中静态解析的字符串转换函数