【问题标题】:Ruby -- Why does += increase the number for my string?Ruby -- 为什么 += 会增加我的字符​​串的数量?
【发布时间】:2018-02-05 03:53:57
【问题描述】:

在以下代码中,"seven" 的值从 1 更改为 2:

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}

谁能解释为什么它从1变成2?

【问题讨论】:

  • 你知道+=运算符是做什么的吗?
  • 试试sample = "seven seven seven seven seven"。注意到什么了吗?
  • 好吧,我超级愚蠢,我想我没有读到字符串中有两个“七”。假设初始字符串都是唯一的,我只是查看了其余代码。谢谢大家

标签: ruby string dictionary hash counter


【解决方案1】:

好的,我试试..

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"]

【讨论】:

  • 好吧,我超级愚蠢,我想我没有读到字符串中有两个“七”。假设初始字符串都是唯一的,我只是查看了其余代码。谢谢。我明白了
  • 是的,我刚刚知道了,非常感谢。我只是专注于认为它是代码,而实际上它只是字符串。明白了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 2015-09-16
相关资源
最近更新 更多