如何将int映射到元组并访问scala中的元组

时间:2018-03-27 09:46:59

标签: scala tuples

我有一个从整数到Int和Double元组的输入映射,如下所示。

def doSomething(x: Seq[Map[Int, (Int, Double)]]): Int = {.....}

现在,我想在doSomething中按如下方式访问x中元组的每个元素。

val res = x.map({ (input, weight) => }).unzip

然后我对输入进行一些计算,这是一个Int和weight,它是地图所有键的双倍。但这不起作用。如何从地图中访问元组值?

3 个答案:

答案 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))