2016-05-19 14 views
0

アレイの上に反復処理の結果を追加する方法:私はの合計を見つける方法を知りたい私は2つのメソッド(それぞれ同じ出力)が

def number(array) 
    array.each do |val1, val2| 
    (val1 - val2) 
    end 
end 

number([[10, 0], [3, 5], [5, 8]]) 
# => 10, -2, -3 

def number(array) 
    array.each do |index| 
    (index[0] - index[1]) 
    end 
end 

number([[10, 0], [3, 5], [5, 8]]) 
# => 10, -2, -3 

を反復の結果。私は私のような何かをすることができます:

(val1 - val2).sum 

しかし、これは動作しません。

+0

2つの方法を示した理由がわかりません。どちらかと一緒にやりたいですか? – sawa

+0

ベストプラクティスがわからないので、どの方法を使用するのが最も良いかを示すためにどのような回答が得られるか見てみました(私はちょうど尋ねたことがありますか?) – sdawes

+0

コードが使用する理由がわかりません'each'は結果を返しません。あなたは '地図'を意味しましたか?上記のコードは、あなたが言及した出力を与えません。 –

答えて

1
[[10, 0], [3, 5], [5, 8]].map{|elem| elem[0] - elem[1]}.inject{|sum,elem| sum + elem} 
+0

すごくいいですよ! – sdawes

+0

あなたは 'map {| e1、e2 | e1 - e2} ' –

4

それを行うための一般的な方法は、次のとおりです。

[[10, 0], [3, 5], [5, 8]].inject(0){|sum, (val1, val2)| sum + val1 - val2} 
# => 5 
+0

すごいよ - それに感謝!私は.injectメソッドを見てきましたが、今はそれが理にかなっています。 – sdawes

1

この答えは他の回答と同じであり、単に別の構文を使用しています。

[[10, 0], [3, 5], [5, 8]].map { |a| a.reduce(:-) }.reduce(:+) 
+0

これは、@ msergeantの回答と多かれ少なかれ同じですが、@ sawaの回答ではありません。あなたのコードはデータを2回繰り返します(内部の 'inject'を数えません)。 @サワは一度だけです。 –

関連する問題