【发布时间】:2015-03-30 14:16:46
【问题描述】:
我是一名初学者 F# 程序员。我知道 F# 是函数式的,并且更喜欢通过函数传输数据的风格,例如集合上的 map 和 iter 函数。尽管如此,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 在风格上是否不受欢迎?什么时候适合使用该场景之外的查询来操作集合数据?
【问题讨论】:
-
更简单的版本:
[1UL .. n] |> List.filter isPrime
标签: .net linq f# functional-programming coding-style