【问题标题】:How to map an int to a tuple and access the tuple in scala如何将int映射到元组并在scala中访问元组
【发布时间】:2018-03-27 18:00:45
【问题描述】:

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

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

现在,我想在 doSomething 中访问 x 中元组的每个元素,如下所示。

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

然后我对输入进行一些计算,输入是 Int,权重是映射所有键的双精度值。但这不起作用。如何从地图中访问元组值?

【问题讨论】:

  • 你的 x 是一个Seq[Map[...]],你需要使用两个map 来访问元组。

标签: scala tuples


【解决方案1】:

您需要执行两个map 操作才能访问您的Map(input,weight)

x.map(_.map { case (key, (input, weight)) => /*do something with (input,weight)*/})

【讨论】:

    【解决方案2】:

    所以 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
          }
        )
    )
    

    【讨论】:

      【解决方案3】:

      您可以使用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))
      

      【讨论】:

        猜你喜欢
        • 2016-02-10
        • 2020-04-06
        • 2015-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多