2017-08-27 7 views
0

次のコードでは12から"seven"変更の値: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 

が出力:それは1から2に行った理由

{} 
{"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} 

は、誰かが説明できますか? OK

+3

'+ = '演算子は何をしていますか? – Ryan

+0

'sample ="で試してみてください。何か気づく? –

+0

大丈夫、私は超愚かです、私は文字列に2つの "sevens"があったことを読んでいないと思います。私は最初の文字列がすべて一意であると仮定してコードの残りの部分を調べました。ありがとうございました –

答えて

1

、私はみます..

word_counts[word.downcase] += 1word_counts[word.downcase] = word_counts[word.downcase] + 1を意味します。今、5回目の繰り返しでword'seven'と等しいので、word_counts['seven'] = word_counts['seven'] + 1となります。しかし、word_counts['seven']1だったので、2になります。

文字列を分割すると、2つの文字列"seven"で配列が取得されます。これは、その文に2つの単語が含まれているためです。

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

私は超愚かです、私は文字列に2つの "sevens"があったとは思いませんでした。私は最初の文字列がすべて一意であると仮定してコードの残りの部分を調べました。ありがとう。私はそれを得た –

+0

ええ、私はちょうどそれをありがとう、そんなに。私はちょうどそれが実際に文字列だったときにそれがコードであったと考えることに集中していました。とった! –

+0

@JohnnyChan np、幸運 –

関連する問題