假设我有一个序列序列,例如
{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/