Scala使用函数式编程技术将元组合并到列表中的一种方法

Scala使用函数式编程技术将元组合并到列表中的一种方法,scala,functional-programming,Scala,Functional Programming,假设我有: val list: List[(Long, Boolean)] = List((0, false), (0, true), (1, true), (1, true)) 最后,我想: List((0, false), (1, true)) 其中“合并”列表按“_1”分组,然后按“逻辑与”分组结果 我可以通过迭代来实现这一点,但看起来Scala和函数式编程通常应该能够使用一组函数来执行此转换。使用,然后是一系列映射/减少操作: val result = list.groupBy(_.

假设我有:

val list: List[(Long, Boolean)] = List((0, false), (0, true), (1, true), (1, true))
最后,我想:

List((0, false), (1, true))
其中“合并”列表按“_1”分组,然后按“逻辑与”分组结果

我可以通过迭代来实现这一点,但看起来Scala和函数式编程通常应该能够使用一组函数来执行此转换。

使用,然后是一系列映射/减少操作:

val result = list.groupBy(_._1) // group by key
  .mapValues(_.map(_._2))       // remove keys from grouped values
  .mapValues(_.reduce(_ && _))  // reduce grouped values using &&
scala> List((0, false), (0, true), (1, true), (1, true))
res0: List[(Int, Boolean)] =
  List((0,false), (0,true), (1,true), (1,true))

scala> .groupBy(_._1)
res1: scala.collection.immutable.Map[Int,List[(Int, Boolean)]] =
  Map(1 -> List((1,true), (1,true)), 0 -> List((0,false), (0,true)))

scala> .mapValues(_.map(_._2))
res2: scala.collection.immutable.Map[Int,List[Boolean]] =
  Map(1 -> List(true, true), 0 -> List(false, true))

scala> .mapValues(_.reduce(_ && _))
res3: scala.collection.immutable.Map[Int,Boolean] =
  Map(1 -> false, 0 -> true)

scala> .toList
res4: List[(Int, Boolean)] =
  List((1,false), (0,true))
是<代码>列表>组> 符号类似于C++ >代码>::“<代码>符号?Scala的新成员。