我正在尝试在Scala中创建一个单词列表。我是这门语言的新手。我已经阅读了很多关于你如何不能编辑不可变对象的帖子,但没有一个能够向我展示如何在Scala中创建我需要的列表。我使用var初始化,但这没有帮助。
var wordList = Seq.empty[String]
for (x <- docSample.tokens) {
wordList.++(x.word)
}
println(wordList.isEmpty)
我非常感谢对此有所帮助。我理解对象在Scala中是不可变的(尽管变量不是),但我需要的是一些简明的信息,为什么上面总是打印“true”,以及如何使列表添加docSample.tokens.word中包含的单词
答案 0 :(得分:8)
您可以使用val并仍然保持wordlist不可变,如下所示:
val wordList: Seq[String] =
for {
x <- docSample.tokens
} yield x.word
println(wordList.isEmpty)
可替换地:
val wordList: Seq[String] = docSample.tokens.map(x => x.word)
println(wordList.isEmpty)
甚至:
val wordList: Seq[String] = docSample.tokens map (_.word)
println(wordList.isEmpty)
答案 1 :(得分:5)
您可以附加到不可变Seq
并通过编写
var
重新分配给结果
wordList :+= x.word
该表达式与wordList = wordList :+ word
以x += 1
相同的方式移植到x = x + 1
。
答案 2 :(得分:0)
这将有效:
wordList = wordList:+(x.word)
答案 3 :(得分:-1)
几个小时后,我发了一个问题,一分钟后就发现了。
wordList =(x.word):: wordList
此代码可以解决遇到同样问题的任何人。