をです。どうか、私を誤解しないでください。私は数年前にRubyを使い始めたときに聞いたことを繰り返すだけです:Rubyを学ぶことは、Rubyの構文を使うこと以上のものです。 1つはRubyのコアを探索し、Rubyのやり方をしようとする必要があります。
これはまさにここで起こります。質問に表示されているコードは、Rubyの方法からは遠いです。 @manonthematによって与えられた答えのコードもあります。
def count_positives_sum_negatives(lst)
result = [0,0]
lst.each { |el| (el > 0) ? result[0] += 1 : result[1] += 1 }
result
end
あるいはさらに良い:
に短縮することができ、両方のケースで
def count_positives_sum_negatives(lst)
lst.each_with_object([0,0]) { |el,arr| (el > 0) ? arr[0] += 1 : arr[1] += 1 }
end
、
puts count_positives_sum_negatives([5,7,-1,-4,4,4,5,-3])
を実行している
[5,3]
につながります
each_with_object
を使用する2番目の形式は、最初の形式よりも優れています。ブロック内で使用するために外部に配列またはハッシュを宣言することは、Rubyではコードの匂いとみなされます。
私は方法の名前(count_positives_sum_negatives
)が良くないことを指摘したいと思います。このメソッドは、陽性と陰性の両方をカウントし、それらのどれも合計しないため、メソッドが何をしているのかを表していません。確かにcount_positives_and_negatives
はより良い名前になります。
ちなみに、@manonthematは、each
を使用すると範囲を基準にしたインデックスを繰り返すよりもはるかに良い方法であることを指摘すると完全に正しいです。ブロック内に実際にインデックスが必要な場合は、それを提供する方法がeach_with_index
です。
あなたのインデックスは1つオフです(私の答えは下記参照) – manonthemat
このメソッドは、ポジティブとネガをカウントします。それはネガを合計しません。なぜそれは 'count_positives_sum_negatives'と呼ばれていますか? 好奇心だけ、大丈夫ですか? –
@Aetherusは最高の "Ruby way"答えをくれました。それを使用してください。 – moveson