红宝石地图!函数和嵌套数组

时间:2012-03-06 19:58:35

标签: ruby arrays multidimensional-array

我需要找到每个嵌套元素的第2个和第3个元素之间的距离,所以

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 个答案:

答案 0 :(得分: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]]

答案 1 :(得分:0)

Map会为您完成循环。您不需要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] 

答案 2 :(得分:0)

这应该适合你:

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

顺便说一下,修改一个函数参数不是一个好主意。