Ruby Hash解释

-1 ruby hash

我不理解CodeAcademy中的这一特定步骤.

text = puts "Hello text please"
text = gets.chomp

words = text.split(' ')
frequencies = Hash.new(0)
words.each { |x| frequencies[x] += 1 }
Run Code Online (Sandbox Code Playgroud)

我们的想法是过滤输入以返回每个单词的散列以及单词出现的次数.无法理解为什么会这样.

words.each { |x| frequencies[x] += 1 }
Run Code Online (Sandbox Code Playgroud)

不通过{key, value}方法散列工作?

lur*_*ker 5

设置哈希值的语法是:

hash_name[key] = value
Run Code Online (Sandbox Code Playgroud)

并且该值被引用为hash_name[key].所以:

frequencies = Hash.new(0)
Run Code Online (Sandbox Code Playgroud)

这将创建一个新的哈希,如果您读取未知密钥的哈希值,它将允许它并将密钥的值默认为0(返回a 0).如果没有0参数,则不会有默认键值,因此使用未知键读取哈希值会产生nil.但是使用默认返回值0,以下内容:

words.each { |x| frequencies[x] += 1 }
Run Code Online (Sandbox Code Playgroud)

通过遍历所有单词,使用它们作为键,即使它们最初不存在,并增加frequency[x]散列键x(当前单词)的散列值,也可以利用默认值.如果尚未设置,则从0您想要计算的内容开始.这是因为+=真正的意思是frequencies[x] = frequencies[x] + 1,frequencies[x]当尚未设置值时返回的初始值将是0.