在Scala中,我说有两个列表
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> oneTwo ::: threeFour
res30: List[Int] = List(1, 2, 3, 4)
或者
scala> oneTwo ++ threeFour
res31: List[Int] = List(1, 2, 3, 4)
两种方法有什么区别?
感谢。
答案 0 :(得分:9)
:::
方法特定于List
,而++
则属于任何Traversable
。
差异源于两件事。首先,List
是原始Scala集合之一,在编译器中经常使用,并且需要进行特殊优化。 ::
串联与ML语言系列中使用的相同,是Scala的一大灵感,:::
从中推断出来。
另一方面,++
在Scala 2.8.0上重新设计了Scala集合,这使得方法和继承统一。我认为它之前存在(例如,在Set
上),但是集合没有共享一个共同的超类,所以它基本上是其他集合的特殊方法。
在效果方面,:::
应该超过++
,但可能不会显着。
答案 1 :(得分:6)
来自文档:
::: [B>:A](前缀:列表[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