2017-02-19 77 views
-1

我有一個像下面兩個散列,如何比較和打印Ruby中匹配的哈希值?

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

我想遍歷HASH1和HASH2並找到匹配鍵和值並將其打印在控制檯。 舉例這裏應該返回輸出「B」 => 2倍。其不與下面的代碼工作,

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 

我是從基本的C++和Java的背景和它很容易做到使用循環和迭代,但使用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 }