使用两个字段解压缩一系列案例类

时间:2013-07-19 15:05:47

标签: scala scala-collections

假设我有一个案例类MyCaseClass,其中包含构造函数中的两个字段,以及此案例类sequence的一系列值。

如何解压缩sequence

2 个答案:

答案 0 :(得分:3)

案例类不扩展Product2,Product3等,因此简单的解压缩不起作用。

这样做:

sequence.unzip { MyCaseClass.unapply(_).get }

答案 1 :(得分:3)

如果字段为ab,那么我只需编写

(sequence map (_.a), sequence map (_.b))

好的,你遍历sequence两次,但是列表遍历非常便宜,我打赌这比使用Option.get更快。

编辑:在Rex的评论之后,无法抗拒自己运行基准测试;结果如下......

times in ms for 100 traversals of 10000 elem collection, 
   L = List, A = Array, V = Vector
                                               // Java 6           // Java 7
sequence.unzip{case MyCaseClass(a,b) => (a,b)} //L 173 A 101 V 87  //L 27 A 29 V 21
sequence.unzip{MyCaseClass.unapply(_).get}     //L 194 A 116 V 100 //L 35 A 32 V 25
(sequence map (_.a), sequence map (_.b))       //L 177 A 70  V 86  //L 34 A 20 V 23

根据CPU,内存,JRE版本,收集大小,月相等,您的结果可能会有所不同。