我有一张格式的地图
scala.collection.mutable.Map[String,List[(Int, Int, Int)]]
,我希望能够访问单个Int。地图中的数据格式始终为
Mon-18-June-2018,1:10:5,2:20:10,3:30:15,4:40:20,5:50:25
日期是地图的关键,而每组三个数字是(整数,整数,整数)
到目前为止,我已经能够以这种格式打印地图
Mon-18-June-2018
List((1,10,5), (2,20,10), (3,30,15), (4,40,20), (5,50,25))
使用以下代码
map.keys.foreach{i =>
println(i)
println(map(i))
我希望能够访问元组中的各个值。例如,我希望能够将每个元组的每个第二个和第三个值相加
(1,10,5)
(2,20,10)
(3,30,15)
(4,40,20)
(5,50,25)
获得
(6,150,75)
我该怎么做?
答案 0 :(得分:3)
您可以使用模式匹配来访问元组的元素。
val dateMap :Map[String,List[(Int, Int, Int)]] =
Map("Mon-18-June-2018" ->
List((1,10,5), (2,20,10), (3,30,15), (4,40,20), (5,50,25)))
dateMap.values.map(_.fold((1,0,0)){case ((a,b,c),(x,y,z)) => (a+1,b+y,c+z)})
//res0: Iterable[(Int, Int, Int)] = List((6,150,75))
答案 1 :(得分:1)
最简单的方法是:
val yourMap : Map[String,List[(Int, Int, Int)]] = Map("Mon-18-June-2018" -> List((1,10,5), (2,20,10), (3,30,15), (4,40,20), (5,50,25)))
yourMap.map(x=> (x._2.length+1,x._2.map(_._2).sum,x._2.map(_._3).sum))
您可以在此处找到更多表格:Scala: How to sum a list of tuples
答案 2 :(得分:0)
要获取列表中的每个值,可以在列表中.map
。
要获取元组的每个元素,请使用tuple._1
,tuple._2
,tuple._3
等。
对于您来说,要将所有元组的值加在一起,您可以执行以下操作:
val m = scala.collection.mutable.Map[String,List[(Int, Int, Int)]](
"Mon-18-June-2018" -> List((1, 10, 5), (2, 20, 10), (3, 30, 15), (4, 40, 20), (5, 50, 25))
)
m.map {
// get keys and values
case (k, v) =>
// construct a Tuple of all of the sums
(v.map(_._1).sum, v.map(_._2).sum, v.map(_._3).sum)
}
// ArrayBuffer((15,150,75))
这将创建一个元组列表((Int, Int, Int)
),其中每个元组都对应于原始Map中的一个键。您甚至可以通过执行以下操作来保留原始地图的键:
m.map{
// get keys and values
case (k, v) =>
// "x -> y" creates a Tuple, or in this case a Map
k -> (v.map(_._1).sum, v.map(_._2).sum, v.map(_._3).sum)
}
// Map(Mon-18-June-2018 -> (15,150,75))