JSF*_*ner 1 scala scala-collections
我有一个像这样的 Scala 代码
val tokens = List("the", "program", "halted")
val test = for (c <- tokens) yield Seq(c)
Run Code Online (Sandbox Code Playgroud)
这里测试返回 List(Seq(String)) 但我只期待 Seq(String) 。对于有经验的人来说,这可能很简单,但我尝试了所有我在基本级别上知道的方法,但没有看。如果有人觉得这很容易,请帮助我。
tokens.toSeq可以,但是如果你在命令行中输入这个,你会看到无论如何Seq都会List在引擎盖下创建一个:
scala> val tokens = List("the", "program", "halted")
tokens: List[String] = List(the, program, halted)
scala> tokens.toSeq
res0: scala.collection.immutable.Seq[String] = List(the, program, halted)
Run Code Online (Sandbox Code Playgroud)
Seq很有趣。如果您的数据更适合存储在 a 中List,它将把它变成一个列表;否则,它会将它变成 a Vector(并且 Vectors 本身很有趣......) - 就像andSeq的超类型一样。如果有的话,除非您有特定用例,否则您应该真正默认使用其他集合类型,但这是另一个问题的答案。ListVectorVector
其他选择当然是:
scala> val test: Seq[String] = tokens
test: Seq[String] = List(the, program, halted)
scala> val test2: Seq[String] = for (token <- tokens) yield token
test2: Seq[String] = List(the, program, halted)
scala> val test3 = (tokens: Seq[String])
test3: Seq[String] = List(the, program, halted)
scala> val test4: Seq[String] = tokens.mkString(" ").split(" ").toSeq
test4: Seq[String] = WrappedArray(the, program, halted)
Run Code Online (Sandbox Code Playgroud)
(只是在开玩笑说最后一个)
外卖虽然是你可以指定变量类型Seq[String]和Scala将对待它,由于它如何处理Seq,List,Vector等发动机罩下。
| 归档时间: |
|
| 查看次数: |
5347 次 |
| 最近记录: |