【发布时间】:2023-03-07 20:46:01
【问题描述】:
给定一系列项目如下:
[ ("a", 1); ("a", 2); ("a", 3); ("b", 1); ("c", 2); ("c", 3) ]
我怎样才能把这个懒惰地转换成:
{ ("a", { 1; 2; 3}); ("b", { 1 }); ("c", { 2; 3}) }
您可以假设输入数据源已经按分组键元素排序,例如"a" "b" 和 "c"。
我在那里使用 { } 表示它是一个惰性求值的项目序列。
我已经让它在源序列的 IEnumerator 上运行的两个 while 循环命令式地工作,但这涉及创建参考变量和突变等。我确信有更好的方法来做到这一点,也许与递归或使用 Seq 库中的一些操作,例如扫描还是展开?
【问题讨论】:
-
我不久前做了类似的事情,也有一些变化:rojepp.wordpress.com/2012/12/20/sql-optimization-trick-in-f
标签: recursion f# immutability