【发布时间】:2014-01-11 09:11:58
【问题描述】:
假设我想生成集合子集的所有组合。由于subset 返回iterator,我不想将其转换为严格的。
def gen(A: Set[Int]) = {
val it0 = A.subsets
val it1 = A.subsets
for(a <- it0; b <- it1) yield (a,b)
}
但这不是我想要的。例如gen(Set(1,2,3)).foreach(println) 返回:
(Set(),Set())
(Set(),Set(1))
(Set(),Set(2))
(Set(),Set(3))
(Set(),Set(1, 2))
(Set(),Set(1, 3))
(Set(),Set(2, 3))
(Set(),Set(1, 2, 3))
似乎只有第二个迭代器迭代所有子集。为什么会有这样的行为,有没有一种很好的方法可以避免这种情况?
【问题讨论】: