2012-03-06 51 views
0

我需要找到每个嵌套元件的所述第二和第三元件之间的距离,以便红宝石地图!功能和嵌套阵列

nested_array = [[0, 3, 4], [1, 20, 21], [2, 2, 2]] 

def pythag_theorem(a, b) 
    c = (a * a) + (b * b) 
    result = Math.sqrt(c) 
    result 
end 

def find_distance(array) 
    t = 0 
    while t < array.length 
    array[t].map! {|x| pythag_theorem(x[1], x[2])} 
    t += 1 
    end 
array 
end 

print find_distance(nested_array) 

我得到

[[0.0, 1.4142135623730951, 0.0], [1.0, 0.0, 1.0], [1.0, 1.0, 1.0]] 

当我需要

[[0, 5], [1, 29], [2, 2.82842712474619]] 

pythag_theorem工作,但为什么不是地图!为我工作?谢谢。

回答

3
a = [[0, 3, 4], [1, 20, 21], [2, 2, 2]] 
a.map {|x,y,z| [x, Math.sqrt(y*y + z*z)]} 
# => [[0, 5.0], [1, 29.0], [2, 2.82842712474619]] 
0

地图为你做循环。您不需要while循环。您也可能不应使用map!修改阵列。

array = [[0, 3, 4], [1, 20, 21], [2, 2, 2]] 
array.map { |(_, a, b)| Math.sqrt(a * a + b * b) } 
# => [5.0, 29.0, 2.8284271247461903] 
+0

我们几乎同时写了答案:-) – 2012-03-06 20:11:34

0

这应该为你工作:

def find_distance(array) 
    array.map do |tuple| 
    [tuple[0],pythag_theorem(tuple[1],tuple[2])] 
    end 
end 

BTW是不修改到位函数的参数是一个好主意。