Scala列表连接,:::与++
Scala列表连接,:::与++
在Scala中,使用:::
和++
拼接列表有什么区别吗?
scala> List(1,2,3) ++ List(4,5) res0: List[Int] = List(1, 2, 3, 4, 5) scala> List(1,2,3) ::: List(4,5) res1: List[Int] = List(1, 2, 3, 4, 5) scala> res0 == res1 res2: Boolean = true
从文档来看,++
更通用,而:::
是List
特有的。是后者因为被其他函数式编程语言使用而被提供了吗?
admin 更改状态以发布 2023年5月21日
永远使用:::
。原因有两个:效率和类型安全。
效率
x ::: y ::: z
比x ++ y ++ z
更快,因为:::
是右结合的。将x ::: y ::: z
解析为x ::: (y ::: z)
比(x ::: y) ::: z
更快(后者需要O(|x|)更多的步骤)。
类型安全
使用:::
只能连接两个List
。 使用++
可以将任何集合附加到List
中,这是很糟糕的:
scala> List(1, 2, 3) ++ "ab" res0: List[AnyVal] = List(1, 2, 3, a, b)
++
与+
也容易混淆:
scala> List(1, 2, 3) + "ab" res1: String = List(1, 2, 3)ab