f# - 在F#中枢转或压缩seq <seq <'a >>

标签 f# functional-programming pivot sequence

假设我有一个序列序列,例如

{1, 2, 3}, {1, 2, 3}, {1, 2, 3}

枢转或压缩此序列的最佳方法是什么,所以我却有了,
{1, 1, 1}, {2, 2, 2}, {3, 3, 3}

有没有一种可理解的方法,而无需依靠对底层IEnumerator<_>类型的操作呢?

为了澄清起见,这些是seq<seq<int>>对象。每个序列(内部和外部)都可以具有任意数量的项目。

最佳答案

如果您要使用语义上为Seq的解决方案,则必须一直保持懒惰。

let zip seq = seq
            |> Seq.collect(fun s -> s |> Seq.mapi(fun i e -> (i, e))) //wrap with index
            |> Seq.groupBy(fst) //group by index
            |> Seq.map(fun (i, s) -> s |> Seq.map snd) //unwrap

测试:
let seq =  Enumerable.Repeat((seq [1; 2; 3]), 3) //don't want to while(true) yield. bleh.
printfn "%A" (zip seq)

输出:
seq [seq [1; 1; 1]; seq [2; 2; 2]; seq [3; 3; 3]]

关于f# - 在F#中枢转或压缩seq <seq <'a >>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12766552/

相关文章:

linux - 在 Monodevelop 中获取 F# 教程时遇到问题。成分错误: the type 'Object' is required here and is unavailable

sorting - F# ResizeArray sortBy 稳定吗?

list - 创建所有可能列表的列表,给定每个元素可以采用 n 个值之一

python-3.x - 使用 pandas dataframe 列值来透视其他列

excel - 在 ActiveX 按钮单击上捕获工作表名称

types - 在 F# 中显式指定参数类型

f# - 在 F# 中制作鱼

haskell - 如何摆脱这种歧义?

types - OCaml 类型推断算法是如何工作的?

VBA 选择数据透视表