【发布时间】:2013-11-13 19:49:29
【问题描述】:
我有一个数组[1,2,4,5,4,7],我想找到每个数字的频率并将其存储在哈希中。我有这段代码,但它返回NoMethodError: undefined method '+' for nil:NilClass
def score( array )
hash = {}
array.each{|key| hash[key] += 1}
end
想要的输出是
{1 => 1, 2 => 1, 4 => 2, 5 => 1, 7 => 1 }
【问题讨论】:
-
先生,有些人建议使用注入(也称为 reduce),这很好,但您只需将
hash = {}更改为hash = Hash.new(0)。这告诉 Ruby 如果遇到hash[key]在必须有值的上下文中(例如hash[key] += 1或v = hash[key])并且哈希不包含键key,则将key=>0添加到采取进一步行动之前的哈希值(例如hash[key] += 1)。另一方面,如果key不在散列中,if hash[key] == 7将评估为if nil == 7;key=>0不会被添加到哈希中。 -
@CarySwoveland 很好的教学...!!喜欢它.. +1.
-
@tokland,问题可能是一样的,但不是问题。在这里,先生。想知道他为什么会出现特定错误,在我看来这很合理。
-
很公平,那么我们就说它是相关的:) stackoverflow.com/questions/9480852/array-to-hash-words-count