Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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 如何基于元组第一个元素求和?_Scala_Tuples - Fatal编程技术网

Scala 如何基于元组第一个元素求和?

Scala 如何基于元组第一个元素求和?,scala,tuples,Scala,Tuples,我有一个三元组列表,如下所示[为了可读性我添加了换行符]: (2, 127, 3) (12156, 127, 3) (4409, 127, 2) <-- 4409 occurs 2x (1312, 127, 12) <-- 1312 occurs 3x (4409, 128, 1) <-- (12864, 128, 1) (1312, 128, 1) <-- (2664, 128, 2) (12865, 129, 1) (183, 129, 1) (12866,

我有一个三元组列表,如下所示[为了可读性我添加了换行符]:

(2, 127, 3)
(12156, 127, 3)
(4409, 127, 2) <-- 4409 occurs 2x
(1312, 127, 12) <-- 1312 occurs 3x

(4409, 128, 1) <-- 
(12864, 128, 1)
(1312, 128, 1) <-- 
(2664, 128, 2)

(12865, 129, 1)
(183, 129, 1)
(12866, 129, 2)
(1312, 129, 10) <--
(2127,3)
(12156, 127, 3)

(4409127,2)如果您可以忽略中间的条目,那么:

val l = List(('a,'e,1), ('b,'f,2), ('a,'g,3), ('b,'h,4))
l.groupBy(_._1).mapValues(_.map(_._3).sum) 
// Map('b -> 6, 'a -> 4)
如果必须保留中间的条目:

l.groupBy(_._1).map { 
  case (_, values) =>
    val (a,b,_) = values.head
    (a, b, values.map(_._3).sum)
} 
// List(('b,'f,6), ('a,'e,4))
试试这个:

list groupBy {_._1} mapValues {v => (v.head._1, v.head._2, v map {_._3} sum)}

中间的条目是保留的,它总是使用输入列表中出现的第一个条目。

您可以使用幺半群的概念。如果条目的前两个值构建键值,其余值构建关联值本身,则可以使用映射

一旦你有了地图,你可以这样做:

您关心中间的入口吗?
list groupBy {_._1} mapValues {v => (v.head._1, v.head._2, v map {_._3} sum)}