2015-12-07 4 views
0

У меня есть массив [(Int, (Int, Int))], как это,массив Группировка по первому элементу

(24, (12, 5)) 
    (12, (17, 3)) 
    (1, (7, 25)) 
    (24, (4, 6)) 
    (1, (13, 3)) 
    (12, (9, 14)) 
    (24, (9, 18)) 

Я хотел бы группа этих массивов от первого элемента, это означает, что я хотел иметь:

(24, ((12, 5), (4, 6), (9, 18))) 
    (12, ((17, 3), (9, 14))) 
    (1, ((7, 25), (13, 3))) 

Может ли кто-нибудь помочь мне с этим?

ответ

4

Так у вас есть:

val arr = Array((24, (12, 5)), (12, (17, 3)), (1, (7, 25)), (24, (4, 6)), (1, (13, 3)), (12, (9, 14)), (24, (9, 18))) 

Вы можете сгруппировать с помощью групповой метод:

val grouped = arr.groupBy(_._1).map {case (k,v) => k -> v.map {case (_, (b,c))=> (b,c)}} 

или:

val grouped = arr.groupBy(_._1).mapValues {_.map {case (_, (b,c))=> (b,c)}} 
+1

К сожалению, метод группеПо не является достаточным для его проблемы. Чтобы получить результат в нужном формате, ему нужно было бы сделать что-то вроде 'arr.groupBy (_._ 1) .mapValues ​​(_. Map (_._ 2))', чтобы удалить ключ из списка значений – irundaia

+0

Право , Исправленный. – Nyavro

+0

Уважаемые Irundaia & Nyavro, отлично, спасибо за вашу помощь. –