2016-11-30 70 views
0

我想生成两个Ints的元组的向量。现在,我做如下:Scala:生成Ints的元组

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

我想知道是否有更有效的方法来做到这一点。我感觉“扁平化”会降低代码速度。我必须使用“扁平”还是可以使用别的东西?如果我不使用“扁平”,我有:矢量(矢量(a,b),矢量(c,d),...)而不是矢量((a,b),(光盘),...)。

PS2:我用(X + 1,直到100)在所述第二发电机作为我不感兴趣在具有元组(A,B)和(B,A)。

回答

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

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

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

这相当于Tzach琐的答案,但你可以看到的关系。在flatMap之内移动filter也是值得的(它会被调用更多时间,但你会得到更小的中间集合)。