2012-03-06 14 views
0

私はルビーマップ!機能およびネストされた配列

[[0, 5], [1, 29], [2, 2.82842712474619]] 
を必要とするとき、私は

[[0.0, 1.4142135623730951, 0.0], [1.0, 0.0, 1.0], [1.0, 1.0, 1.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) 

ネストされた各要素の2番目と3番目の要素間の距離を見つける必要があります

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

私たちはほぼ同時に回答を書いています:-) –

0

これはあなたのために働く必要があります。

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

ところで、場所に関数の引数を変更することはお勧めできません。

関連する問題