2016-11-30 54 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也是值得的(它會被調用更多時間,但你會得到更小的中間集合)。