如何迭代scala地图?

时间:2011-06-15 21:13:34

标签: scala

我有scala地图:

attrs: Map[String , String]

当我尝试迭代地图时,

attrs.foreach { key, value =>     }

以上不起作用。在每次迭代中,我必须知道什么是关键,什么是价值。使用scala syntactic sugar迭代scala map的正确方法是什么?

3 个答案:

答案 0 :(得分:150)

三个选项:

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将其拆分为键和值标识符名称。

答案 1 :(得分:72)

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

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

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

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

答案 2 :(得分:2)

我添加了一些其他方法来迭代地图值。

// 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))
  }