使用压缩集合在 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()
.
的参数
我必须从一些基本类型的集合中生成一个对象集合。所以我尝试了以下两种方法并且都有效:
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()
.