Arrays Scala:array.toList与array.to[List]

Arrays Scala:array.toList与array.to[List],arrays,scala,Arrays,Scala,我想知道数组中.toList和.to[List]之间有什么区别。我在spark shell上做了这个测试,结果没有差别,但我不知道用什么更好。有什么评论吗 scala> val l = Array(1, 2, 3).toList l: List[Int] = List(1, 2, 3) scala> val l = Array(1, 2, 3).to[List] l: List[Int] = List(1, 2, 3) 添加到Luis的注释中,[List]的实际上是(正如Luis

我想知道数组中.toList和.to[List]之间有什么区别。我在spark shell上做了这个测试,结果没有差别,但我不知道用什么更好。有什么评论吗

scala> val l = Array(1, 2, 3).toList
l: List[Int] = List(1, 2, 3)

scala> val l = Array(1, 2, 3).to[List]
l: List[Int] = List(1, 2, 3)

添加到Luis的注释中,[List]的
实际上是(正如Luis所提到的)使用工厂参数来构造列表。但是,链接的源代码仅在集合大修后从Scala 2.13+生效。您使用的语法在Scala 2.13中不起作用,相反,您必须将
.to(List)
,显式地传递工厂参数。在以前的Scala版本中,该方法类似于。CanBuildFrom本质上是一个作为隐式参数传递的工厂

此方法存在的原因是它是标准库中集合之外的通用方法(并且您不必将每个可能的转换定义为单独的方法)。您可以使用另一个集合库(例如),构建工厂或使用包含的工厂,并使用
to(factory)
方法。您也可以在通用函数中使用它,将工厂作为参数,并将其传递给转换方法,例如:

def mapAndConvert[A, B, C](list: List[A], f: A => B, factory: Factory[B, C]): C[B] =
  list.map(f).to(factory)

在本例中,我不需要知道什么是集合
C
,但我仍然可以轻松返回一个。

如果您检查,您将看到它们是等效的
到[Coll]
获取Coll的工厂,并将
作为参数传递。-<代码>列表
也执行相同的操作,但明确使用列表的
工厂
。-我只需要使用
toList
它(对我来说)读起来更好,并且可以为您节省一个间接调用。但最终,它们是一样的。@LuisMiguelMejíaSuárez我建议写下这个作为答案