linq - F# 和 PLINQ 扩展方法

标签 linq visual-studio-2010 f# extension-methods plinq

在深入研究 F# 的最新版本时,我尝试让它与 PLINQ 交互。
然而,我注意到两者在代码方面并没有很好地结合在一起。
事实上,编写如下代码似乎是不可能的:


open System.Linq
let someArray = [|"abc"; "def"|]
someArray.AsParallel().Count(new Func<_,_>(fun s -> s.Length = 3))

因为 System.Linq.ParallelEnumerable 类中包含的 ParallelQuery 的扩展方法似乎没有被 F# 采用。
如果根本不支持扩展方法,我不会感到惊讶,但是由于我可以访问为 IEnumerable 定义的 someArray.Count 扩展方法,我想知道为什么我不能访问 PLINQ 的扩展方法。
我错过了什么吗?
这是 F# 限制吗?如果是这样,是通过设计吗?如果没有,是否会在 future 的版本中解决?

最佳答案

如果你还没有使用 .NET 4.0,你可以这样写:

#r "System.Threading"
open System.Linq

let someArray = [|"abc"; "def"|]

someArray.AsParallel<string>()
|> Seq.filter (fun s -> s.Length = 3)
|> Seq.length

来到 .NET 4.0,你可以写:
let someArray = [|"abc"; "def"|]

someArray
|> Array.Parallel.filter (fun s -> s.Length = 3)
|> Array.length

F# 更喜欢使用 Seq 模块而不是 Linq 扩展方法。但是,在 FSharp.PowerPack.Linq 程序集中有一些辅助函数可用。

关于linq - F# 和 PLINQ 扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/922563/

相关文章:

c# - 为什么这三段 LINQ 代码会产生不同(或错误)的结果?

C# - 带有 OR 子句的 LINQ 语句

.net - 为什么 Enumerable<T>.ToArray() 可以先调用 Count() 时使用中间缓冲区?

visual-studio-2010 - 管理 TFS 工作项

c++ - 如何配置 VS2010 代码生成功能?

c# - 从 C# 调用 F# 时,OO 替代 F# 中的多态性

c# - 如何使用 linq 加入多对多关系

visual-studio-2010 - Microsoft Visual Express 10中没有devenv文件

f# - 如何在 Linux/Mac 上启动 FsUnit 测试

f# - Visual Studio 11 开发人员预览版中的 F# 3.0 出现内部 F# 错误?