我有一个包含如下元组的Vector:
Vector( (a1,(a2,(a3,a4))),(b1,(b2,(b3,b4))),(c1,(c2,(c3,c4))),...............)
这个向量很长,我对a1,b1,c1 ....等等,以及a2,b2,c2 ...等都重复了(相等的)值,对a3,b3,c3同样, ....等等。 我的要求是:
我想要三个向量,它们分别具有a1,b1.c1 ....等,a2,b2,c2 ....等以及a3,b3,c3 ....等(即,根据该特定元素的first appearance
来区分。)
在Scala中有没有一种方法可以做到以下几点: 所有这些值都是整数还是双精度值?
示例:
GIVEN矢量:
Vector( (2,(8,(4,5))),(6,(3,(7,9))),(2,(3,(7,9))),(2,(8,(4,5))))
答案:
Vector1 : Vector( (2,(8,(4,5))),(6,(3,(7,9))) )
Vector2 : Vector( (2,(8,(4,5))),(6,(3,(7,9))) )
Vector3 : Vector( (2,(8,(4,5))),(6,(3,(7,9))) )
即,基于该特定元素的first appearance
的区别。
答案 0 :(得分:2)
您可以使用groupBy
,然后从每个组中获得第一个结果:
val vec = Vector((2, (8, (4, 5))),
(6, (3, (7, 9))),
(2, (3, (7, 9))),
(2, (8, (4, 5))))
val vector1 = vec.groupBy(_._1).values.map(_.head)
val vector2 = vec.groupBy(_._2._1).values.map(_.head)
val vector3 = vec.groupBy(_._2._2._1).values.map(_.head)
这将根据要求按第一个元素断开联系。但是请注意,不能保证vector1,vector2和vector3中元素的顺序。