gpt4 book ai didi

linq - 如何在 F# 中执行 linq-to-IEnumerable 风格的连接

转载 作者:行者123 更新时间:2023-12-01 11:59:14 26 4
gpt4 key购买 nike

我有一个项目,我正在尝试将其转换为 F#,其中包含大量 linq-to-IEnumerable 样式查询。我很好奇在 F# 中进行多个列表连接的最优雅的方式是什么。例如,如果我有一堆如下所示的 C# 代码



 var joinedList =
来自 list1 中的 val1
在 val1.Key 上加入 list2 中的 val2.Key 等于 val2.Parent
在 val1.Key 上加入 list3 中的 val3 等于 val3.Parent
orderby val1
选择新的 {val1, val2, val3};

将其转换为 F# 的最佳方式是什么?我将保留“最佳”的定义,但我正在寻找功能性而非命令性的东西,最好不要将我的列表转换为 seqs 和/或导入 System.Linq。懒惰和急切的解决方案都会有用。当然,可重用性是关键,因为我到处都有这样的查询。如果有任何方法可以使用工作流使语法更优雅,那也很棒。

最佳答案

嗯,在 Don 关于 LINQ 和 Powerpack 的博客中:

http://blogs.msdn.com/b/dsyme/archive/2009/10/23/a-quick-refresh-on-query-support-in-the-f-power-pack.aspx

它展示了如何进行 LINQ 加入调用。但当然这是在 seq 上并使用 LINQ。他还指出连接就像一个条件。所以我认为例如你的例子就像

let joinedList = [
for v1 in l1 do
for v2 in l2 do
if v1.Key = v2.Parent then
for v3 in l3 do
if v1.Key = v3.Parent then
yield (v1, v2, v3)] |> List.sort

虽然我没有在真实数据上验证过。

关于linq - 如何在 F# 中执行 linq-to-IEnumerable 风格的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3230388/

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