gpt4 book ai didi

f# - 如何在大小未知时使用 while..do 循环初始化 F# 列表

转载 作者:行者123 更新时间:2023-12-02 05:35:21 25 4
gpt4 key购买 nike

我有一个函数可以解析 DataReader 的结果,但我不知道返回了多少项,所以我想使用 while..do 循环来迭代读者,结果应该是某种类型的列表。

(fun(reader) ->
[
while reader.Read() do
new CityType(Id=(reader.GetInt32 0), Name=(reader.GetString 1), StateName=(reader.GetString 2))
])

这是我尝试过的,但我得到的警告是:

This expression should have type 'unit', but has type 'CityType'. Use 'ignore' to discard the result of the expression, or 'let' 
to bind the result to a name.

那么迭代 DataReader 并创建列表的最佳方法是什么?

最佳答案

你可以使用列表理解:

[
while reader.Read() do
let d = new CityType(Id=(reader.GetInt32 0), Name=(reader.GetString 1), StateName=(reader.GetString 2))
yield d
]

还有一个例子:

/// The squares of the first 10 integers
let squaresOfOneToTen = [ for x in 0..10 -> x*x ]

let squaresOfOneToTen = [ for x in 0..10 do yield x*x ]

您也可以对序列和数组执行此操作:

seq { 
for i=1 to 9 do
for j=1 to 9 do
yield (i,j,i*j)
}


[| for i=1 to 100 do yield i*i |]

你也可以在一个序列中产生一个子序列(yield!),这里是一个使用Project Euler 31的例子.

关于f# - 如何在大小未知时使用 while..do 循环初始化 F# 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2894454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com