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

Unique Elements in a Vector of tuples with inner tuples

我有一个包含如下元组的向量:

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 不同。

您可以使用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 中的元素顺序无法保证。