在Scala中的元组列表上使用groupBy
我试图在Scala中将元组列表分组 输入:在Scala中的元组列表上使用groupBy,scala,Scala,我试图在Scala中将元组列表分组 输入: val a = List((1,"a"), (2,"b"), (3,"c"), (1,"A"), (2,"B")) 我申请: a.groupBy(e => e._1) 我得到的结果是: Map[Int,List[(Int, String)]] = Map(2 -> List((2,b), (2,B)), 1 -> List((1,a), (1,A)), 3 -> List((3,c))) 这与我的预期略有不同: Map[I
val a = List((1,"a"), (2,"b"), (3,"c"), (1,"A"), (2,"B"))
我申请:
a.groupBy(e => e._1)
我得到的结果是:
Map[Int,List[(Int, String)]] = Map(2 -> List((2,b), (2,B)), 1 -> List((1,a), (1,A)), 3 -> List((3,c)))
这与我的预期略有不同:
Map[Int,List[(Int, String)]] = Map(2 -> List(b, B), 1 -> List(a, A)), 3 -> List(c))
要获得预期的输出,我可以做些什么?您的意思可能是:
a.groupBy(_._1).mapValues(_.map(_._2))
或:
结果:
Map(2 -> List(b, B), 1 -> List(a, A), 3 -> List(c))
如果您不想使用mapValues,这是您所期望的吗
a.groupBy(_._1).map(f => (f._1, f._2.map(_._2)))
结果
Map(2 -> List(b, B), 1 -> List(a, A), 3 -> List(c))
令人惊讶的是,被接受的答案并没有完全回答实际问题。谢谢。这符合我的目的。有没有其他方法可以应用groupBy来避免使用mapValues?@ZZZ因为
List[A]
上的groupBy
将返回Map[K,List[A]
,似乎没有办法,因为List[(X,Y)]
将始终转换为Map[K,List[(X,Y)]
而不是Map[K,List[Y]
。因此,不,您必须mapValues
。我添加了另一个,希望更美观的变体。
Map(2 -> List(b, B), 1 -> List(a, A), 3 -> List(c))