Rubyで配列から奇数の整数を合計する[終了]

概要

inputs = [
  ["9", "5", "4"],
  ["20", "40", "60"],
  ["1", "3", "19"]
]
numbers = inputs.sample
pp numbers

配列内の奇数の整数のみを加算する方法を見つけようとしています。したがって、テストを実行するたびに、3 つの行から選択してそれらを加算します。

.each メソッドを使用して各整数をループしようとしましたが、エラーが発生し続けます。

sum = 0
numbers.each  { |num| sum = num}
if  pp num.to_i.odd?
    pp num.to_i 
end

解決策

Rubyの配列にはsumというメソッドがあります。

このメソッドにブロックを渡すと、そのブロックの結果を「合計」します(引用符は、Array#sum が合計の数学的定義に限定されていないためです)。したがって、あなたの場合、これは次のように要約できます。

inputs = [
  ["9", "5", "4"],
  ["20", "40", "60"],
  ["1", "3", "19"]
]
inputs.sample.sum {|e| e.to_i.odd? ? e.to_i : 0 } 

この場合 (三項演算子を使用)、e.to_i が奇数の場合はその数値を返し、それ以外の場合は 0 を返します。これは、各既知の入力について次と同等です。

Ruby では、任意の数の Enumerable メソッドを使用してこの目標を達成する方法が他にもたくさんあります。 (例:map、select、filter_map、injectなど)