2013-10-04 24 views
-1

我想在使用我提供的if代碼後將:sym3的值更改爲"A"。但是我不想通過明確地更改:sym3的值來訪問它,所以如果我遍歷包含其他符號的其他數組,我可以這樣做,如果一個不匹配其他兩個。 這樣做最好的方法是什麼?如何在Ruby中更改數組中Key的值?

一旦我的if語句運行和我看到的關鍵之一是等於「B」我想改變這種狀況鍵值爲「A」

hash = {:sym1 => "A", :sym2 => "A", :sym3 => "B"} 
array = [:sym1, :sym2, :sym3] 
if hash.values_at(*array).count("A") == 2 and @spaces.values_at(*array).count("B") == 1 

else 

end 
+0

的符號不能具有值' 「A」'。一個散列可以有一個值「A」作爲一個鍵。 – sawa

+0

我不太明白這個問題。謹慎闡述? – hirolau

+0

一旦我的if語句運行,我看到其中一個鍵等於「B」,我想將該鍵的值更改爲「A」@hirolau – RavensFlock

回答

0

這是你正在尋找的答案(只是迭代它)?

hash = {:sym1 => "A", :sym2 => "A", :sym3 => "B"} 
array = [:sym1, :sym2, :sym3] 

hash.each do |key, value| 
    if value == "B" 
    hash[key] = "A" 
    end 
end 
0

如果你想改變的值:SYM3,然後使用此代碼:

hash[array[2]]="A" 
+0

「2」!?爲什麼我們鼓勵在索引中使用幻數? – erbdex

-1

你不說你的哈希值是否總是有三個要素,或做什麼,如果,說,所有元素都有不同的值。但我想知道這是你想要的嗎?

它按值分組散列的內容,挑選多數組並將散列的所有值設置爲最常見的值。

hash = {:sym1 => "A", :sym2 => "A", :sym3 => "B"} 

majority = hash.group_by { |pair| pair[1] }.max_by { |group| group[1].size } 
hash.each_key { |key| hash[key] = majority[0] } 

p hash 

輸出

{:sym1=>"A", :sym2=>"A", :sym3=>"A"} 
+0

我的原始散列有3個以上的元素,但是我的數組總是隻有3個。謝謝你的幫助,但是這是比我特殊問題更多的代碼 – RavensFlock