2017-11-22 22 views
0

私は2つのハッシュを持っており、if条件の結果に基づいてそれらのうちの1つを反復処理する必要があります。以下は私のコードは、現在どのように見えるかです:Ruby each Iterator - if条件に基づいて反復処理するためにハッシュを置き換えますか?

if SOME CONDITION 
    hash_a.each do |x| 
    some code in here 
    end 
else 
    hash_b.each do |x| 
    the same code in here 
    end 

あり、各要素に対して実行されるコードの約30行がされているので、私の質問をされています。もっとこのようなコードを見て何かを作るための方法があります:

SOME CONDITION ? hash_a.each do |x| : hash_b.each do |x| 
    some code in here 
end 

それ以外の方法で単純化/縮小しますか?

ありがとうございます!

+1

引数としてハッシュを使用してメソッドを作成することをお勧めします。たとえば、 'def doit(hash);ここにいくつかのコード。終わり。次に 'doit(condition?hash_a:hash_b)'を実行します。これはあなたがやっていることを明確にし、テストを容易にします。 –

答えて

2

あなたは直接例えば、三項演算子を持つ上eachを呼び出すためにオブジェクトを選択することができます。:

(SOME_CONDITION ? hash_a : hash_b).each do |x| 
    # some code in here 
end 

SOME_CONDITIONはかなり単純な場合、これはきれいなアプローチです。条件がより複雑な場合は、条件を抽出するか、オブジェクト選択全体をそれぞれ独自のメソッドに抽出する必要があります。

関連する問題