在scala中将元组列表缩减为单个元组

在scala中将元组列表缩减为单个元组,scala,tuples,Scala,Tuples,项是自定义类型。 我有很多对(项,项)。每对中的第一个元素都是相同的,因此我想将列表简化为一对类型(Item,Array[Item]) //list:Iterable[(项目,项目)] //第一次尝试 val res = list.foldLeft((null, Array[Item]()))((p1,p2) => { (p2._1, p1._2 :+ p2._2) } //第二次尝试 val r = list.unzip val res = (r._1.head,

项是自定义类型。 我有很多对
(项,项)
。每对中的第一个元素都是相同的,因此我想将列表简化为一对类型
(Item,Array[Item])

//
list:Iterable[(项目,项目)]

//第一次尝试

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))
1。我不知道如何在第一个(“foldLeft”)解决方案中正确设置零值。有没有办法做这样的事


2.除了第二种解决方案,还有更好的方法将自定义对象元组列表简化为单个元组吗?

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

(list.head._1, list.map(_._2))
我应该做这项工作

如果存在第一个元素不同的其他情况,您可能希望尝试:

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

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

(list.head._1, list.map(_._2))
我应该做这项工作

如果存在第一个元素不同的其他情况,您可能希望尝试:

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