附加到列表模式匹配

che*_*bow 1 scala pattern-matching

我目前面临以下问题。

我的代码基本上具有以下情况:

val toList = this.toString.match {
  case "" => List[MyType]()
  case _  => this.val :: this.prev.toList
}
Run Code Online (Sandbox Code Playgroud)

显然不准确,但它的一般要点。它工作正常,但我希望将值以相反的顺序附加到列表中。有什么好的方法可以做到这一点吗?如果我尝试颠倒顺序并执行操作,Intellij 会抛出错误

this.prev.toList :: this.val
Run Code Online (Sandbox Code Playgroud)

并且如果我尝试使用 ++ 之类的操作。根据我的班级结构,我试图做的事情是不可能的吗?

当我尝试将 this.prev.toList 放在 this.val 之前时,我遇到的具体错误涉及“无法解析 ::”或我使用的任何符号。

是的,“这个”不是必需的——我把它包括在内是为了让我的问题更容易理解。

Fil*_*ale 5

:: 在此列表的开头添加一个元素

scala> 1 :: List(2,3)
List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

+: 相当于 ::

scala> 1 +: List(2,3)
List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

:+ 在列表末尾追加元素

scala> List(1,2) :+ 3
List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

然而,在 List 上添加的成本是 O(1) 但附加的成本是 O(n)!

对于“众多”集合,您可以考虑其他数据结构,例如 Vector:

Vector 提供非常快速的追加和前置

http://www.scala-lang.org/api/2.11.7/index.html#scala.collection.immutable.Vector