Scala-groupBy将值映射到列表
我有以下输入数据Scala-groupBy将值映射到列表,scala,Scala,我有以下输入数据 ((A, 1, 4), (A, 2, 5), (A, 3, 6)) 我想得出以下结果 (A, (1, 2, 3), (4, 5, 6)) 通过按键分组输入 在Scala中这样做的正确方法是什么?尝试以下方法: def takeHeads[A](lists:List[List[A]]): (List[A], List[List[A]]) = (lists.map(_.head), lists.map(_.tail)) def translate[A](lists:Lis
((A, 1, 4), (A, 2, 5), (A, 3, 6))
我想得出以下结果
(A, (1, 2, 3), (4, 5, 6))
通过按键分组输入
在Scala中这样做的正确方法是什么?尝试以下方法:
def takeHeads[A](lists:List[List[A]]): (List[A], List[List[A]]) =
(lists.map(_.head), lists.map(_.tail))
def translate[A](lists:List[List[A]]): List[List[A]] =
if (lists.flatten.isEmpty) Nil else {
val t = takeHeads(lists)
t._1 :: translate(t._2)
}
yourValue.groupBy(_.head).mapValues(v => translate(v.map(_.tail)))
这会在您的值上使用时生成一个映射[Any,Any]。。。但它应该让你朝着正确的方向前进
((A,1,4)、(A,2,5)、(A,3,6))
如果这表示一个列表[(String,Int,Int)]
类型,请尝试以下操作
val l = List(("A", 1, 4), ("A", 2, 5), ("A", 3, 6), ("B", 1, 4), ("B", 2, 5), ("B", 3, 6))
l groupBy {_._1} map {
case (k, v) => (k, v map {
case (k, v1, v2) => (v1, v2)
} unzip)
}
这将导致一个Map[String,(List[Int],List[Int])]
,即,一个带有字符串键的映射到两个列表的元组的映射
地图(A->(列表(1,2,3),列表(4,5,6)),B->(列表(1,2,3),列表(4,5,6)))
你能不能对你所期望的类型再具体一点?什么是
A4
?单个字符串?一个字符串和两个整数?它们是列表(A,1,4)。你试过什么?你有没有一个你一直在研究的功能示例没有返回期望的结果?@BotianZhong他们是List[List[Any]]
你的意思?或者一个列表[(String,Int,Int)]
(元组列表)?键是什么?您的示例只有一个键值,如果它是“A”。能有更多的钥匙吗?一个更完整的例子会有所帮助