使用压缩集合在 scala 中初始化一个案例 class

Using zipped collections to initialize a case class in scala

我必须从一些基本类型的集合中生成一个对象集合。所以我尝试了以下两种方法并且都有效:

case class Gr (x:Int,y:Int, z:Int)

val x = List(1,2,4,2,5)
val y = Array(1,2,7,4,5)
val z = Seq(1,2,4,8,5)


(x,y,z).zipped.toList.map(a => Gr(a._1,a._2,a._3))
(x,y,z).zipped.map(Gr:(Int,Int,Int) => Gr) 

那么,哪一个更好,第二个实际效果如何?还有更好的方法吗?

第一个可以减少到(x,y,z).zipped.toList.map(Gr.tupled),第二个可以减少到(x,y,z).zipped.map(Gr),我觉得是shorter/clearer


回想一下 map() 的参数本质上是 A => B,因此我们可以简单地写 ds.map(d => Math.sqrt(d)),它是类型 Double => Double,而不是写 ds.map(d => Math.sqrt(d)) 16=] 因为 sqrt() 是正确的类型。

在这种情况下,Gr 构造函数是 (A,A,A) => B 类型。 Scala 编译器能够获取 zipped 的输出并匹配构造函数类型,因此构造函数可以用作 map().

的参数