我有一个从整数到Int和Double元组的输入映射,如下所示。
def doSomething(x: Seq[Map[Int, (Int, Double)]]): Int = {.....}
现在,我想在doSomething中按如下方式访问x中元组的每个元素。
val res = x.map({ (input, weight) => }).unzip
然后我对输入进行一些计算,这是一个Int和weight,它是地图所有键的双倍。但这不起作用。如何从地图中访问元组值?
答案 0 :(得分:1)
您需要执行两次map
操作才能访问Map
值(input,weight)
x.map(_.map { case (key, (input, weight)) => /*do something with (input,weight)*/})
答案 1 :(得分:0)
所以x.map在你的情况下需要一个函数作为形式Map[Int,(Int,Double)] => B
的参数,所以要获得输入和权重(假设这是元组)你将不得不
x.map(
kvMap => kvMap.map(
kv => {
val tuple = kv._2
val input = tuple._1
val weight = tuple._2
}
)
)
答案 2 :(得分:0)
您可以使用collect
scala> val seqMap :Seq[Map[Int, (Int, Double)]] = List(Map(1->(1,1.0), 2-> (2,2.0)),Map(3->(3,3.0), 4-> (4,4.0)))
seqMap: Seq[Map[Int,(Int, Double)]] = List(Map(1 -> (1,1.0), 2 -> (2,2.0)), Map(3 -> (3,3.0), 4 -> (4,4.0)))
scala>val result = seqMap.collect{
case e => e.values.map( ele => ele._1 -> ele._2)
}.flatten
result : Seq[(Int, Double)] = List((1,1.0), (2,2.0), (3,3.0), (4,4.0))