【问题标题】:Add element to Seq[String] in Scala在 Scala 中将元素添加到 Seq[String]
【发布时间】:2014-12-22 04:14:18
【问题描述】:

我正在尝试在 Scala 中创建一个单词列表。我是语言新手。我已经阅读了很多关于如何无法编辑不可变对象的文章,但没有一篇文章能够向我展示如何在 Scala 中创建我需要的列表。我正在使用 var 进行初始化,但这没有帮助。

var wordList = Seq.empty[String]

for (x <- docSample.tokens) {
  wordList.++(x.word)
}

println(wordList.isEmpty)

我将非常感谢您对此的帮助。我知道对象在 Scala 中是不可变的(尽管 vars 不是),但我需要一些简明信息,说明为什么上面总是打印“true”,以及如何使列表添加 docSample.tokens.word 中包含的单词.

【问题讨论】:

  • 听起来你想要像val wordList = docSample.tokens.map(_.word) 这样的东西 不需要可变变量。或者flatMap,如果word恰好是另一个Seq..从你的帖子中不清楚。

标签: java list scala seq


【解决方案1】:

您可以使用 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)

【讨论】:

    【解决方案2】:

    您可以附加到不可变的Seq 并通过写入将var 重新分配给结果

    wordList :+= x.word
    

    那个表达式去糖到wordList = wordList :+ word,就像x += 1去糖到x = x + 1一样。

    【讨论】:

      【解决方案3】:

      这将起作用:

      wordList = wordList:+(x.word)
      

      【讨论】:

        【解决方案4】:

        几个小时后,我发布了一个问题,一分钟后想通了。

        wordList = (x.word)::wordList

        此代码可为遇到相同问题的任何人解决此问题。

        【讨论】:

        • 这里不需要使用可变的var wordList。
        猜你喜欢
        • 2020-08-12
        • 1970-01-01
        • 1970-01-01
        • 2022-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-05
        • 1970-01-01
        相关资源
        最近更新 更多