在运行数组时,键值对是否进入Ruby中的哈希?
我正在Codecademy中学习Ruby,我被困在hash课程中。我在阅读键值对如何进入散列时遇到问题。下面是代码:在运行数组时,键值对是否进入Ruby中的哈希?,ruby,hash,Ruby,Hash,我正在Codecademy中学习Ruby,我被困在hash课程中。我在阅读键值对如何进入散列时遇到问题。下面是代码: puts "Text please: " text = gets.chomp words = text.split(" ") frequencies = Hash.new(0) words.each {|word| frequencies[word] += 1} frequencies = frequencies.sort_by {|word, count| count}
puts "Text please: "
text = gets.chomp
words = text.split(" ")
frequencies = Hash.new(0)
words.each {|word| frequencies[word] += 1}
frequencies = frequencies.sort_by {|word, count| count}
frequencies.reverse!
frequencies.each{|word, count| puts word + " " + count.to_s}
所以这段代码应该计算用户输入的单词频率。我对代码单词有点困惑。每个{单词|频率[word]+=1}
…那么,每次前面的代码在每个单词中运行时,频率数字都会进入哈希吗?否则,一个重复的单词怎么可能计数为2
如果有人能向我解释一下代码
words.each{| word | frequencies[word]+=1}
,那就太好了,这样我就能理解整个代码块。非常感谢你 是的,它指定frequencies[word]+=1
是以下方面的语法糖:
frequencies[word] = frequencies[word] + 1
可进一步改写为:
frequencies.[]=(word, frequencies[word] + 1)
这里,将方法
[]=
应用于执行赋值的哈希频率。每次调用时,frequencies[word]
都会重新分配一个值,该值比以前的值增加一个。是,它会分配一个值frequencies[word]+=1
是以下方面的语法糖:
frequencies[word] = frequencies[word] + 1
可进一步改写为:
frequencies.[]=(word, frequencies[word] + 1)
这里,将方法[]=
应用于执行赋值的哈希频率。每次调用时,frequencies[word]
都会重新分配一个值,该值比以前的值递增一
频率=散列。新建(0)
在这一行中,意味着如果密钥不存在,它将向您返回0
频率[字]
所以,若单词不存在,它将向您返回0,就像您刚写时“返回nil”
频率=Hash.new
但是请注意,如果没有对值“0”执行任何操作,则不会存储键值
频率[字]+=1
因此在此之后,新值将通过关键字“word”存储
我认为它之所以使用0而不是nil,是因为0更便于计算,而“nil”需要另外一个条件来判断,就像这样
频率。如果频率为[word],则存储(word,0)。零
频率[字]+=1
试试这个,你就会知道它是怎么工作的
a=散列。新(1)
放置一个['x']
把a.to_
放置一个['x']+=1
把a.to_
频率=散列。新建(0)
在这一行中,意味着如果密钥不存在,它将向您返回0
频率[字]
所以,若单词不存在,它将向您返回0,就像您刚写时“返回nil”
频率=Hash.new
但是请注意,如果没有对值“0”执行任何操作,则不会存储键值
频率[字]+=1
因此在此之后,新值将通过关键字“word”存储
我认为它之所以使用0而不是nil,是因为0更便于计算,而“nil”需要另外一个条件来判断,就像这样
频率。如果频率为[word],则存储(word,0)。零
频率[字]+=1
试试这个,你就会知道它是怎么工作的
a=散列。新(1)
放置一个['x']
把a.to_
放置一个['x']+=1
把a.to_
到底是什么让你困惑?频率[word]
中的方括号或+=
运算符或两者都有?如果您发现任何答案都有用,请务必接受答案。到底是什么让您感到困惑?frequencies[word]
中的方括号或+=
运算符或两者都有?如果您发现任何有用的答案,请务必接受答案。