Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在运行数组时,键值对是否进入Ruby中的哈希?_Ruby_Hash - Fatal编程技术网

在运行数组时,键值对是否进入Ruby中的哈希?

在运行数组时,键值对是否进入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}

我正在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}

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]
中的方括号或
+=
运算符或两者都有?如果您发现任何有用的答案,请务必接受答案。