2017-08-27 98 views
0

在下面的代码从1"seven"变化2值:Ruby - 为什么+ =会增加我的字符​​串的数量?

word_counts = Hash.new(0) 
sample = "If seven maids with seven mops" 
sample.split.each do |word| 
    word_counts[word.downcase] += 1 
    puts word_counts 
end 

输出:

{} 
{"if"=>1} 
{"if"=>1, "seven"=>1} 
{"if"=>1, "seven"=>1, "maids"=>1} 
{"if"=>1, "seven"=>1, "maids"=>1, "with"=>1} 
{"if"=>1, "seven"=>2, "maids"=>1, "with"=>1} 
{"if"=>1, "seven"=>2, "maids"=>1, "with"=>1, "mops"=>1} 

有人可以解释为什么它从12

+3

你知道'+ ='操作符的作用吗? – Ryan

+0

试着用“样品=”七七七七“'。注意什么? –

+0

好吧,我超级愚蠢,我想我没有读过字符串中有两个“sevens”。我只是看了其余的代码,假设初始字符串都是唯一的。谢谢你们 –

回答

1

OK,我会尝试..

word_counts[word.downcase] += 1意味着word_counts[word.downcase] = word_counts[word.downcase] + 1。现在,在第五次迭代word等于'seven',所以它确实word_counts['seven'] = word_counts['seven'] + 1。但是word_counts['seven']1,所以它变成了2

当你拆分字符串时,你会得到带有两个字符串"seven"的数组,因为该句子有两次出现该单词。

"If seven maids with seven mops".split #=> ["If", "seven", "maids", "with", "seven", "mops"] 
+0

好吧,我超级笨,我想我没有读过字符串中有两个“sevens”。我只是看了其余的代码,假设初始字符串都是唯一的。谢谢。我知道了 –

+0

是的,我刚刚得到了,非常感谢。我只是非常专注于认为这是代码,实际上它只是字符串。得到它了! –

+0

@JohnnyChan np,祝你好运 –

相关问题