스칼라 맵을 반복하는 방법?


81

스칼라 맵이 있습니다.

attrs: Map[String , String]

내가지도를 반복하려고 할 때,

attrs.foreach { key, value =>     }

위는 작동하지 않습니다. 반복 할 때마다 키와 값을 알아야합니다. 스칼라 구문 설탕을 사용하여 스칼라 맵을 반복하는 적절한 방법은 무엇입니까?

답변:


72

foreach메소드는 Tuple2[String, String]2 개의 인수가 아닌 인수로 수신 합니다. 따라서 튜플처럼 사용할 수 있습니다.

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

또는 패턴 일치를 만들 수 있습니다.

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

6
Rex의 답변, 더 나은 옵션보기
iwein 2013-04-03

156

세 가지 옵션 :

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.


1

맵 값을 반복하는 몇 가지 방법을 추가했습니다.

// 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.