恐怕这是另一个菜鸟问题。
我想做的是使用 aMap
来计算一个单词在诗歌中出现的频率……m然后将结果打印到控制台。我去了以下我认为有效的代码(虽然可能不太习惯):
val poe_m="""Once upon a midnight dreary, while I pondered weak and weary,
|Over many a quaint and curious volume of forgotten lore,
|While I nodded, nearly napping, suddenly there came a tapping,
|As of some one gently rapping, rapping at my chamber door.
|`'Tis some visitor,' I muttered, `tapping at my chamber door -
|Only this, and nothing more.'"""
val separators=Array(' ',',','.','-','\n','\'','`')
var words=new collection.immutable.HashMap[String,Int]
for(word<-poe_m.stripMargin.split(separators) if(!word.isEmpty))
words=words+(word.toLowerCase -> (words.getOrElse(word.toLowerCase,0)+1))
words.foreach(entry=>println("Word : "+entry._1+" count : "+entry._2))
据我了解,在 Scala 中,不可变数据结构比可变数据结构更可取val
,var
因此我面临一个困境:如果结果是,words
应该是var
(允许每次迭代使用新的 map 实例)存储在一个不可变 Map
的同时words
变成一个val
意味着使用一个可变 Map
的。
有人能告诉我处理这个存在问题的正确方法吗?