如何在Ruby中生成成对距离数组?

时间:2008-09-24 00:04:54

标签: ruby algorithm

假设我有一个代表一组点的数组:

x = [2, 5, 8, 33, 58]

如何生成所有成对距离的数组?

3 个答案:

答案 0 :(得分:5)

x = [2, 5, 8, 33, 58]
print x.collect {|n| x.collect {|i| (n-i).abs}}.flatten

我认为会这样做。

答案 1 :(得分:0)

如果你真的想要一个数组而不是一个矩阵,那就是O(n ^ 2/2)而不是O(n ^ 2)。

result=[]
x.each_index{|i| (i+1).upto(x.size-1){|j| result<<(x[i]-x[j]).abs}}

答案 2 :(得分:0)

x.map{|i| x.map{|j| (i-j).abs } }

给出

[[0, 3, 6, 31, 56],
 [3, 0, 3, 28, 53],
 [6, 3, 0, 25, 50],
 [31, 28, 25, 0, 25],
 [56, 53, 50, 25, 0]]

(通过用'pp'而不是put来打印它来格式化它)

x.map{|i| x.map{|j| (i-j).abs } }.flatten

给出

[0, 3, 6, 31, 56, 3, 0, 3, 28, 53, 6, 3, 0, 25, 50, 31, 28, 25, 0, 25, 56, 53, 50, 25, 0]

如果你真的想要一个数组