我目前面临以下问题。
我的代码基本上有以下几种情况:
val toList = this.toString.match {
case "" => List[MyType]()
case _ => this.val :: this.prev.toList
}
显然不准确,但它的一般要点。它工作正常,但我希望以相反的顺序附加到列表中的值。有什么好办法吗?如果我试图颠倒顺序并执行
,Intellij会抛出错误this.prev.toList :: this.val
如果我尝试使用像++这样的操作。根据我班级的结构,我想做什么不可能?
我得到的具体错误涉及“无法解析::”或我尝试在this.val之前放置this.prev.toList时使用的任何符号。
是的,“这个”没有必要 - 我把它包括在内,希望能让我的问题更容易理解。
答案 0 :(得分:4)
::
在此列表的开头添加了一个元素
scala> 1 :: List(2,3)
List(1, 2, 3)
+:
相当于::
scala> 1 +: List(2,3)
List(1, 2, 3)
:+
在列表末尾添加元素
scala> List(1,2) :+ 3
List(1, 2, 3)
然而,在List上预先支付的费用是O(1),但是附加的费用是O(n)!
对于“众多”集合,您可以考虑其他数据结构,如Vector:
Vector提供非常快速的追加和前置
http://www.scala-lang.org/api/2.11.7/index.html#scala.collection.immutable.Vector
答案 1 :(得分:0)
您可以使用此方法追加:+
:
this.prev.toList :+ this.val // is `val` really then name?
但请记住,对于长列表,追加List
可能效率非常低。