将元组列表减少为scala中的单个元组

时间:2017-04-14 20:10:38

标签: scala tuples

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

// 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))

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

2。除了第二个解决方案之外,是否有更好的方法可以将自定义对象元组列表减少为单个元组?

1 个答案:

答案 0 :(得分:2)

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

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

应该做的工作

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

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