Scalaマップを繰り返す方法は?


81

私はscalaマップを持っています:

attrs: Map[String , String]

次のようにマップを反復処理しようとすると、

attrs.foreach { key, value =>     }

上記は機能しません。各反復で、キーと値を知る必要があります。Scalaシンタックスシュガーを使用してScalaマップを反復処理する適切な方法は何ですか?

回答:


72

foreachメソッドはTuple2[String, String]、2つの引数ではなく、引数として受け取ります。したがって、タプルのように使用できます。

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

または、パターンを一致させることができます。

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

6
レックスの答えを見てください、そこにもっと良いオプションがあります
iwein 2013

158

3つのオプション:

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

秘訣は、反復によってキーと値のペアが得られることです。これは、caseまたはを使用せずにキーと値の識別子名に分割することはできませんfor


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))
  }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.