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
中也可能是值得的(它会被调用更多次,但你会得到更小的中间集合)。
我想生成一个由两个整数组成的元组向量。现在,我做如下:
(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
中也可能是值得的(它会被调用更多次,但你会得到更小的中间集合)。