多个序列的惰性笛卡尔积(序列的序列) [英] Lazy cartesian product of multiple sequences (sequence of sequences)
本文介绍了多个序列的惰性笛卡尔积(序列的序列)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
你能建议更简单、更清晰的方法来编写这个函数吗?
Can you suggest simpler and clearer way to write this function?
let cartesian_product sequences =
let step acc sequence = seq {
for x in acc do
for y in sequence do
yield Seq.append x [y] }
Seq.fold step (Seq.singleton Seq.empty) sequences
推荐答案
不太优雅,但(似乎)更快的解决方案:
Less elegant, but (seems to be) faster solution:
let cartesian_product2 sequences =
let step acc sequence = seq {
for x in acc do
for y in sequence do
yield seq { yield! x ; yield y } }
Seq.fold step (Seq.singleton Seq.empty) sequences
;
> cartesian items |> Seq.length;;
Real: 00:00:00.405, CPU: 00:00:00.405, GC gen0: 37, gen1: 1, gen2: 0
val it : int = 1000000
> cartesian_product2 items |> Seq.length;;
Real: 00:00:00.228, CPU: 00:00:00.234, GC gen0: 18, gen1: 0, gen2: 0
val it : int = 1000000
这篇关于多个序列的惰性笛卡尔积(序列的序列)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文