具有内部元组的元组向量中的唯一元素

时间:2018-07-11 17:24:08

标签: scala distinct

我有一个包含如下元组的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的区别。

1 个答案:

答案 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中元素的顺序。