Как выполнить итерацию карты scala?

У меня есть scala map:

attrs: Map[String , String]

Когда я пытаюсь выполнить итерацию по карте, например:

attrs.foreach { key, value =>     }

выше не работает. На каждой итерации я должен знать, что является ключом и какова ценность. Каков правильный способ перебора карты scala с использованием синтаксического сахара scala?

Ответ 1

foreach метод получает Tuple2[String, String] как аргумент, а не 2 аргумента. Таким образом, вы можете использовать его как кортеж:

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

или вы можете сделать совпадение с шаблоном:

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

Ответ 2

Три варианта:

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.