可能重复:
Scala列表连接,::: vs ++
在Scala中,我说有两个列表
scala> val oneTwo = List(1,2)
oneTwo: List[Int] = List(1, 2)
Run Code Online (Sandbox Code Playgroud)
和
scala> val threeFour = List(3,4)
threeFour: List[Int] = List(3, 4)
Run Code Online (Sandbox Code Playgroud)
我可以通过以下方式连接列表:
scala> oneTwo ::: threeFour
res30: List[Int] = List(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)
要么
scala> oneTwo ++ threeFour
res31: List[Int] = List(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)
两种方法有什么区别?
谢谢.
该:::方法是特定的List,同时++是任何方法的一部分Traversable.
差异源于两件事.首先,List是原始Scala集合之一,在编译器中经常使用,并且需要进行特殊优化.该::级联是在ML家族的语言,大斯卡拉灵感之一使用的相同,并:::从中推断.
另一方面,++在Scala 2.8.0上重新设计了Scala集合,这使得方法和继承变得统一.我认为它之前存在(Set例如),但是集合并没有共享一个共同的超类,所以它基本上是其他集合的临时方法.
在性能方面,:::应该击败++,但可能不会显着.
来自文档:
::: [B>:A](前缀:List [B]):列表[B]
++ [B>:A](即:Iterable [B]):List [B]
你可以看到++适用于任何Iterable虽然:::是专门针对List的
scala> val oneTwo = List(1,2)
oneTwo: List[Int] = List(1, 2)
scala> val threeFour = List(3,4)
threeFour: List[Int] = List(3, 4)
scala> val fiveSix = Array(5,6)
fiveSix: Array[Int] = Array(5, 6)
scala> oneTwo ++ fiveSix
res2: List[Int] = List(1, 2, 5, 6)
scala> oneTwo ::: fiveSix
<console>:10: error: value ::: is not a member of Array[Int]
oneTwo ::: fiveSix
Run Code Online (Sandbox Code Playgroud)