2017-02-19 12 views
-1

私はHASH1とHASH2を反復と一致するキーとその値を見つけると、コンソール上でそれを印刷したい以下のような2つのハッシュ、Rubyで一致するハッシュ値を比較して出力する方法は?

h1 = {"a" => 1, "b" => 2, "c" => 3} 
h2 = {"a" => 2, "b" => 2, "d" => 3} 

を持っています。 例ここでは、私は基本的にC++とJavaの背景とループやイテレータのために使用して行うことは、その非常に簡単からですが、使用してコードの下で作業していない出力「B」=> 2 .its、

h1.each do |key1, value1| 

    h2.each do |key2, value2| 
    if ((h2.include? key1) && (h2.include? value1)) 
     puts "matching h2 key #{h2[key2]}and h1 key #{h1[key1]}" 
    else 
     puts " don not match h2 key #{h2[key2]}and h1 key #{h1[key1]}" 
    end 
    end 
end 

を返す必要がありますRuby、それは非常に難しいです。

+1

あなたの質問は不明です。 「それは機能していません」とはどういう意味ですか? *どのように動作していないのですか?間違いはありますか?はいの場合は、取得している正確な*エラーメッセージは何ですか、バックトレースは何ですか?エラーはどの行に表示されますか?あなたに警告がありますか?はいの場合、*正確な*警告メッセージとは何ですか?警告はどの行に表示されますか?観察された行動は期待される行動と異なるか?はいの場合、観察された行動とは何か*期待される行動は何ですか?すべての例外、特別なケース、... –

+1

...コーナーケース、およびエッジケースを含め、*正確に*実行したいことの仕様を指定してください。また、例外の例、コーナーケース、特殊ケース、エッジケースなどのサンプルの入力と出力をテストケースとして提供してください。タイトルでは、「値の照合」について質問しています。一致する値が期待する結果は '[{" b "=> 2}、{" c "=> 3}、{" d "=> 3}]'です。質問の本文では、「一致するキー」について質問しています。一致するキーが期待する結果は '[{" a "=> 1}、{" a "=> 2}、{" b "> 2}]'です。しかし、どちらも '{" b "=> 2}'のあなたの望む結果には対応していません。 –

答えて

0

あなたは第二のループが必要とされていない

h1.each do |k,v| 
    if h2[k] == v 
    puts "matched key = #{k} and value = #{v}" 
    else 
    puts "NOT matched key = #{k} and value = #{v}" 
    end 
end 

出力

NOT matched key = a and value = 1 
matched key = b and value = 2 
NOT matched key = c and value = 3 
0

のような何かを書くかもしれません。

h1.each do |key1, value1| 
    if (h2.include? key1) and (h2[key1] == value1) 
    puts "Match #{key1} with value #{value1}" 
    else 
    puts "#{key1} does not match" 
    end 
end 
+0

これは私のために働く....ありがとう – Pratapkumarv4

1
h1.merge(h2) { |k,o,n| puts "#{k}=>#{o}" if o == n } 
"b" => 2 

これは、マージされ、両方のハッシュに存在するキーの値を決定するボックを使用Hash#mergeの形態を使用します。詳細については、ドキュメントを参照してください。

0

結果が主な目的である場合、選択はあまりにも動作することができます:

h1.select{|k,v| h2[k] == v } 
関連する問題