ruby - 更新值为哈希的哈希
问题描述
我有这个散列,其中键是 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"}}
解决方案
只是出于好奇:
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"}}