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 之前时,我遇到的具体错误涉及“无法解析 ::”或我使用的任何符号。
是的,“这个”不是必需的——我把它包括在内是为了让我的问题更容易理解。
::
在此列表的开头添加一个元素
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