【问题标题】:How to iterate scala map?如何迭代scala map?
【发布时间】:2011-09-15 21:46:35
【问题描述】:

我有 scala 地图:

attrs: Map[String , String]

当我尝试像这样迭代地图时;

attrs.foreach { key, value =>     }

上述方法不起作用。在每次迭代中,我必须知道什么是关键,什么是价值。使用 scala 语法糖迭代 scala 映射的正确方法是什么?

【问题讨论】:

    标签: scala


    【解决方案1】:

    三个选项:

    attrs.foreach( kv => ... )          // kv._1 is the key, kv._2 is the value
    attrs.foreach{ case (k,v) => ... }  // k is the key, v is the value
    for ((k,v) <- attrs) { ... }        // k is the key, v is the value
    

    诀窍在于迭代为您提供键值对,如果不使用 casefor,您将无法将其拆分为键和值标识符名称。

    【讨论】:

      【解决方案2】:

      foreach 方法接收 Tuple2[String, String] 作为参数,而不是 2 个参数。所以你可以像元组一样使用它:

      attrs.foreach {keyVal => println(keyVal._1 + "=" + keyVal._2)}
      

      或者你可以进行模式匹配:

      attrs.foreach {case(key, value) => ...}
      

      【讨论】:

      • 看看 Rex 的回答,那里有更好的选择
      【解决方案3】:

      我添加了更多迭代地图值的方法。

      // Traversing a Map
        def printMapValue(map: collection.mutable.Map[String, String]): Unit = {
      
          // foreach and tuples
          map.foreach( mapValue => println(mapValue._1 +" : "+ mapValue._2))
      
          // foreach and case
          map.foreach{ case (key, value) => println(s"$key : $value") }
      
          // for loop
          for ((key,value) <- map) println(s"$key : $value")
      
          // using keys
          map.keys.foreach( key => println(key + " : "+map.get(key)))
      
          // using values
          map.values.foreach( value => println(value))
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-20
        • 2011-09-25
        • 2018-07-01
        • 2019-06-28
        • 1970-01-01
        • 2014-02-19
        相关资源
        最近更新 更多