Scala:生成整数元组

Scala: Generate tuple of Ints

我想生成一个由两个整数组成的元组向量。现在,我做如下:

(0 until 100).map(x => (x+1 until 100).map(y => (x,y))).flatten.filter { ... }

我想知道是否有更有效的方法来做到这一点。我觉得 "flatten" 会减慢代码速度。我必须使用 "flatten" 还是可以使用其他东西?

PS1:如果我不使用 "flatten",我有:Vector(Vector(a,b),Vector(c,d),...) 而不是 Vector( (a,b),(c,d),...).

PS2:我在第二个生成器中使用 (x+1 直到 100),因为我对元组 (a,b) 和 (b,a) 不感兴趣。

for {
  i <- 0 until 100
  j <- i+1 until 100
} yield (i,j)

map(f).flatten可以缩短为flatMap(f),所以你会得到

(0 until 100).flatMap(x => (x+1 until 100).map(y => (x,y))).filter(...)

这等同于 Tzach Zohar 的回答,但您可以看出其中的关系。将 filter 移动到 flatMap 中也可能是值得的(它会被调用更多次,但你会得到更小的中间集合)。