【问题标题】:How to change the value of a Key within an array in Ruby? [closed]如何在 Ruby 中更改数组中键的值? [关闭]
【发布时间】:2013-10-11 18:38:25
【问题描述】:

使用我提供的if 代码后,我想将:sym3 的值更改为"A"。但是,我不想通过显式更改 :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

【问题讨论】:

  • 符号不能有值"A"。散列可以有一个值"A" 作为一个键。
  • 我不太明白这个问题。需要详细说明吗?
  • 一旦我的 if 语句运行并且我看到其中一个键等于“B”,我想将该键的值更改为“A”@hirolau
  • 我会这样做:hash[hash.key('B')] = 'A',但我觉得我错过了一些东西..

标签: ruby arrays hash key symbols


【解决方案1】:

这是您正在寻找的答案吗(只是遍历它)?

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

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

【讨论】:

    【解决方案2】:

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

    hash[array[2]]="A"
    

    【讨论】:

    • “2”!?为什么我们鼓励在索引中使用幻数?
    【解决方案3】:

    你没有说你的哈希值是否总是包含三个元素,或者说如果所有元素都有不同的值该怎么办。但不知道这是不是你想要的?

    它按值对散列的内容进行分组,选择多数组并将散列的所有值设置为最常见的值。

    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"}
    

    【讨论】:

    • 我的原始哈希有 3 个以上的元素,但我的数组总是只有 3 个。感谢您的帮助,但是对于我的特定问题,这比我需要的更多代码
    猜你喜欢
    • 2012-02-16
    • 2019-05-10
    • 2015-08-26
    • 2018-12-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    相关资源
    最近更新 更多