-1

使用我提供的代码后,我想更改 to 的值:sym3。但是,我不想通过显式更改 的值来访问它,所以如果我确实迭代包含其他符号的其他数组,如果一个与其他两个不匹配,我可以这样做。这样做的最佳方法是什么?"A"if:sym3

一旦我的 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
4

3 回答 3

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
于 2013-10-04T17:22:54.043 回答
0

如果要更改 :sym3 的值,请使用以下代码:

hash[array[2]]="A"
于 2013-10-04T17:25:38.957 回答
-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"}
于 2013-10-04T17:54:18.207 回答