Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala-groupBy将值映射到列表_Scala - Fatal编程技术网

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”。能有更多的钥匙吗?一个更完整的例子会有所帮助