首页 > 解决方案 > 更新值为哈希的哈希

问题描述

我有这个散列,其中键是 0、3 和 5,值是散列。

{0=>{:occurrences=>1, :className=>"class"},
 3=>{:occurrences=>3, :className=>"hello"},
 5=>{:occurrences=>3, :className=>"nah"}}

我怎样才能实现这样的事情:

h.map { |key| 
  if key[:occurrences] > 2
    key[:occurrences] += 1 
  end
}

我知道这种语法不起作用。我想在满足条件时增加出现值,但我不确定如何访问键的键,但我希望结果是:

{0=>{:occurrences=>1, :className=>"class"}, 
 3=>{:occurrences=>4, :className=>"hello"}, 
 5=>{:occurrences=>4, :className=>"nah"}}

标签: ruby

解决方案


只是出于好奇:

input.map do |k, v|
  [k, v[:occurrences].to_i > 2 ? v.merge(occurrences: v[:occurrences] + 1) : v]
end.to_h
#⇒ {0=>{:occurrence=>1, :className=>"class"},
#   3=>{:occurrences=>4, :className=>"hello"},
#   5=>{:occurrences=>4, :className=>"nah"}}

推荐阅读