如何在Ruby中更改数组中Key的值?

时间:2013-10-04 16:52:14

标签: ruby arrays hash key symbols

我想在使用我提供的: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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

hash[array[2]]="A"

答案 2 :(得分:-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"}