如何在Ruby中生成成对距离数组?
时间:2020-03-06 14:38:07 来源:igfitidea点击:
假设我有一个代表一组点的数组:
x = [2, 5, 8, 33, 58]
如何生成所有成对距离的数组?
谢谢!
解决方案
x = [2, 5, 8, 33, 58] print x.collect {|n| x.collect {|i| (n-i).abs}}.flatten
我认为那样就可以了。
如果我们确实确实想要一个数组而不是矩阵,那么它是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}}
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'而不是puts进行打印来进行格式化)
和
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]
如果你真的想要一个数组