4

假设我有一个MyCaseClass在构造函数中有两个字段的案例类,以及这个案例类的一系列值,sequence.

我如何解压缩sequence

4

2 回答 2

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 版本、集合大小、月相等,您的结果可能会有所不同。

于 2013-07-19T16:15:36.237 回答
3

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

这样做:

sequence.unzip { MyCaseClass.unapply(_).get }
于 2013-07-19T15:05:46.933 回答