2017-04-14 72 views
0

项是自定义类型。 我有一对(Item, Item)的Iterable。每对中的第一个元素是一样的,所以我想将列表缩减为一个单独对类型(Item, Array[Item])将元组列表缩减为scala中的单个元组

// list: Iterable[(Item, Item)]

//首先尝试

val res = list.foldLeft((null, Array[Item]()))((p1,p2) => { 
      (p2._1, p1._2 :+ p2._2) 
} 

//第二次尝试

val r = list.unzip 
val res = (r._1.head, r._2.toArray)) 

我不知道如何正确地设置在第一个零值(“折左“)解决方案。有没有办法做这样的事情?

2.除了第二个解决方案,有没有更好的办法,以减少自定义对象的元组的单元组的列表?

+3

'(list.head._1,list.map (_._ 2))'? – Psidom

回答

1

如果您确定每对中的第一个元素是相同的,那么为什么不使用这些信息来简化?

(list.head._1, list.map(_._2)) 

应该做

如果有其他情况下,第一个元素是不同的,你可能会想尝试的工作:

list.groupBy(_._1).map { case (common, lst) => (common, lst.map(_._2)) }