2015-01-27 3 views
0
val x1 = List(
         c1(1, ("UTC",List(c2("2014 - 11 - 23", 0.8747f)))), 
         c1(2, ("UTC", List(c2("2014 - 11 - 23", 0.0f)))), 
         c1(1, ("EST", List(c2("2014 - 09 - 01", 0.432f)))), 
         c1(3, ("EST", List(c2("2014 - 09 - 01", 4.1043f)))) 
        ) 

Теперь я хочу, чтобы мой список должны быть сгруппирован по идентификатору, как показано ниже,как группировать пункты списка в Скале

val x2 = List(
c1(1, ("UTC", List(c2("2014 - 11 - 23", 0.8747f)), ("EST", List(c2("2014 - 09 - 01", 0.432f)))), 
c1(2, ("UTC", List(c2("2014 - 11 - 23", 0.0f)))),  
c1(3, ("EST", List(c2("2014 - 09 - 01", 4.1043f))))) 
) 

поэтому весь список с идентификатором = 1 сгруппирован в один список.

P.S. c1 и c2 - классы case для хранения данных.

+0

@ joachim- кроме оригинального вопроса, может вы тела мне, как вы отформатировали вопрос? – GKV

+0

Я только что изменил тег, от 'scale' до' scala'. :) –

ответ

0

Может быть что-то вроде этого:

case class c1(id: Int, data: (String, List[c2])*) 
    case class c2(d: String, v: Float) 

    val x2 = x1.groupBy(_.id).map(g => c1(g._1, g._2.flatMap(y => y.data): _*)) 
    println(x2) 

    // List(
    //  c1(2,List((UTC,List(c2(2014 - 11 - 23,0.0))))), 
    //  c1(1,List((UTC,List(c2(2014 - 11 - 23,0.8747))), 
    //    (EST,List(c2(2014 - 09 - 01,0.432))))), 
    //  c1(3,List((EST,List(c2(2014 - 09 - 01,4.1043)))))) 
+0

что это значит "_ *" ??? – GKV

+0

Если бы я был прав с вашей подписью 'c1'. Это означает, что я могу передать 'Seq [(String, List [c2])]' в var arg param 'data: (String, List [c2]) *'. – user5102379

+0

Ох не видел, что вы добавили параметр var arg param. это сработало спасибо :) – GKV

0

Если я не ошибаюсь, вы ищете List.groupBy:

x1.groupBy(_.id) 
0

Я думаю, это то, что вы ищете.

case class c1(id:Int, list:List[String]) 
object Tester extends App{ 

    val x = List(c1(1, List("a","b")), c1(2, List("x","y")), c1(1,List("t","w")), c1(4, List("g","j"))) 
    val y = x.groupBy(_.id) 
    println(y) 
} 
Смежные вопросы