作为第一次尝试考虑
for (a <- 1 to 5; b <- 1 to 5; if a < b) yield (a,b)
这给出了
Vector((1,2), (1,3), (1,4), (1,5),
(2,3), (2,4), (2,5),
(3,4), (3,5),
(4,5))
只有一半的 b
值有效,因此
for (a <- 1 to 5; b <- a+1 to 5) yield (a,b)
还提供相同的上三角矩阵坐标。
询问生成此坐标向量的更快方法。
非常感谢。
最佳答案
您能做的最好的事情就是将所有内容放入Array
中,并在while
循环(或递归)中创建元素,以避免通用机制带来的任何开销对于
。 (实际上,使用两个数组,每个索引一个数组,速度会更快。)
val a = {
val temp = new Array[(Int, Int)](5*4/2)
var k = 0
var i = 1
while (i <= 5) {
var j = i+1
while (j <= 5) {
temp(k) = (i,j)
j += 1
k += 1
}
i += 1
}
temp
}
但是除非您有充分的理由相信您的其他方法不能充分发挥作用,否则您不应该遇到所有这些麻烦。
您已将其命名为“并行处理”,但您可能会给内存子系统带来沉重的负担,以至于并行化不会对您有太大帮助。但当然,您始终可以将一些线路拆分到不同的处理器上。你需要一些远大于 5 的东西才能成为一个好主意。
关于performance - Scala快速生成上三角矩阵坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22630879/