首次尝试考虑
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)
也提供相同的上三角矩阵坐标。
要问更快的方法来生成这个坐标向量。
非常感谢。
答案 0 :(得分:3)
您可以做的最好的事情就是将所有内容都放在Array
中,然后在while
循环中创建元素(或递归),以避免for
的通用机制产生任何开销。 (实际上,使用两个数组,每个索引一个数组会更快。)
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的方式,这是一个好主意。