gpt4 book ai didi

.net - LINQ 表达式是在 F# 中操作数据的可接受的方式吗?

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

我是一名初级 F# 程序员。我知道 F# 是函数式的,并且更喜欢通过函数传输数据的样式,例如集合上的 mapiter 函数。尽管如此,LINQ 表达式还是提供了一种替代的、高度可读的方法来操作集合;但是,我不确定它是否更加必要并且违背了使用函数式语言的意义。

例如,没有 LINQ:

let listOfPrimes n =
[1UL..n]
|> List.choose (fun i -> match i with
| i when isPrime i -> Some i
| _ -> None)

使用 LINQ,我们可以做到:

let listOfPrimes n =
query {
for i in [1UL..n] do
where (isPrime i)
select i
}
|> List.ofSeq

我注意到,在使用 LINQ 时,我们需要将结果序列转换为列表。那么,实际性能差异是多少呢?在实际的数据库查询之外,LINQ 是否在风格上不受欢迎?什么时候适合使用该场景之外的查询来操作集合数据?

最佳答案

我认为这是一个偏好问题 - 有些人喜欢使用高阶函数编写代码,有些人更喜欢 LINQ 风格的查询表达式。

值得注意的是,还有序列表达式,它可以被视为查询语法的简单版本。序列表达式无法让您轻松访问其他查询运算符,但它们可以很好地处理简单的事情,您还可以使用 [ ... ] 表示法以列表形式获取结果:

let listOfPrimes n =
[ for i in [1UL..n] do
if (isPrime i) then yield i ]

我个人的偏好是:

  • 使用序列表达式进行简单的过滤、投影和选择
  • 对其他操作使用高阶函数(也许查询表达式更好的复杂分组和连接除外)。
  • 使用查询表达式进行数据库访问

关于.net - LINQ 表达式是在 F# 中操作数据的可接受的方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29348599/

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