89 votes

Comment itérer une carte en scala ?

J'ai une carte scala :

attrs: Map[String , String]

Lorsque j'essaie d'itérer sur une carte comme ;

attrs.foreach { key, value =>     }

la méthode décrite ci-dessus ne fonctionne pas. À chaque itération, je dois savoir quelle est la clé et quelle est la valeur. Quelle est la bonne façon d'itérer sur une carte scala en utilisant le sucre syntaxique scala ?

165voto

Rex Kerr Points 94401

Trois options :

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

L'astuce est que l'itération vous donne des paires clé-valeur, que vous ne pouvez pas diviser en un nom d'identifiant de clé et de valeur sans utiliser soit case o for .

77voto

tenshi Points 13370

foreach reçoit Tuple2[String, String] comme argument, et non pas 2 arguments. Vous pouvez donc l'utiliser comme un tuple :

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

ou vous pouvez faire correspondre les modèles :

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

7 votes

Voir la réponse de Rex, il y a de meilleures options.

4voto

Ranga Points 130

J'ai ajouté d'autres façons d'itérer les valeurs d'une carte.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X