F# 序列一次返回一个项目
F# sequences returning one item at a time
我是 F# 的新手,我正在尝试将 DbDataReader class 从 C# 转换为 F#,DBDataReader 读取 returns 一个 csv 行作为列表
member this.ReadCSV =
seq {
use textReader = File.OpenText(filename)
while (not textReader.EndOfStream) do
let line = textReader.ReadLine()
// linedata is a class variable that holds the current data for use by DBDataReader
linedata <- line |> Seq.toList |> splitDelimited delimiter "" [])
yield true
yield false
}
DBDataReader class 有一个 Read() 函数,调用时应将光标移动到输入中的下一行,我使用索引变量实现了它,如下所示,但这在处理文件时似乎效率低下有数百万行。有更有效的方法吗?
override this.Read() =
let hasRows = Seq.item idx this.ReadCSV
idx <- idx + 1
hasRows
为什么不使用枚举器而不是序列?
如果你真的想使用 FP 风格的序列,那么
- 序列中的收益选项值和
- 将使用
this.Read()
方法的循环语句替换为使用 this.ReadCSV
作为可枚举表达式和 的 for..in 表达式
member this.CSV =
seq {
use textReader = File.OpenText(filename)
while (not textReader.EndOfStream) do
let line = textReader.ReadLine()
yield (line |> Seq.toList |> splitDelimited delimiter "" [])
}
for linedata in this.CSV do
...
我是 F# 的新手,我正在尝试将 DbDataReader class 从 C# 转换为 F#,DBDataReader 读取 returns 一个 csv 行作为列表
member this.ReadCSV =
seq {
use textReader = File.OpenText(filename)
while (not textReader.EndOfStream) do
let line = textReader.ReadLine()
// linedata is a class variable that holds the current data for use by DBDataReader
linedata <- line |> Seq.toList |> splitDelimited delimiter "" [])
yield true
yield false
}
DBDataReader class 有一个 Read() 函数,调用时应将光标移动到输入中的下一行,我使用索引变量实现了它,如下所示,但这在处理文件时似乎效率低下有数百万行。有更有效的方法吗?
override this.Read() =
let hasRows = Seq.item idx this.ReadCSV
idx <- idx + 1
hasRows
为什么不使用枚举器而不是序列?
如果你真的想使用 FP 风格的序列,那么
- 序列中的收益选项值和
- 将使用
this.Read()
方法的循环语句替换为使用this.ReadCSV
作为可枚举表达式和 的 for..in 表达式
member this.CSV =
seq {
use textReader = File.OpenText(filename)
while (not textReader.EndOfStream) do
let line = textReader.ReadLine()
yield (line |> Seq.toList |> splitDelimited delimiter "" [])
}
for linedata in this.CSV do
...