'39', 'kim' => '35', 'larry' => '47' } for word in hash hash[word] += 1 end puts -6ren">
gpt4 book ai didi

ruby - 我认为我可以增加 ruby​​ 中散列键的值。为什么会失败?

转载 作者:数据小太阳 更新时间:2023-10-29 08:19:03 26 4
gpt4 key购买 nike

hash = { "bill" => '39', 'kim' => '35', 'larry' => '47' }

for word in hash hash[word] += 1 end

puts "Bill is now #{hash['bill]']}"

这是错误信息

undefined method `+' for nil:NilClass (NoMethodError)

最佳答案

这不起作用,因为 word 将代表散列中每个键/值对的数组。因此,在第一次通过循环时,word 将变为 ["bill", "39"]。这就是 hash[word] 返回 nil 的原因。

图示:

ruby-1.9.2-p180 :001 > for word in hash
ruby-1.9.2-p180 :002?> puts word.inspect
ruby-1.9.2-p180 :003?> end
["bill", 40]
["kim", 36]
["larry", 48]

你可能想要的是:

hash.keys.each do |k|
hash[k] += 1
end

第二个问题是您将值存储为字符串而不是整数。因此,+= 1 操作将失败。将您的散列更改为此:

hash = { "bill" => 39, 'kim' => 35, 'larry' => 47 }

或者在执行 + 1 之前将值转换为整数。

关于ruby - 我认为我可以增加 ruby​​ 中散列键的值。为什么会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7987268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com