[dictionary] Groovy에서 맵을 반복 하시겠습니까?

Groovy에서 수행하려는 매우 간단한 작업이 있지만 작동하지 않는 것 같습니다. groovy에서 맵 객체를 반복하고 키와 값을 인쇄하려고하지만이 코드가 작동하지 않습니다.

// A simple map
def map = [
        iPhone : 'iWebOS',
        Android: '2.3.3',
        Nokia  : 'Symbian',
        Windows: 'WM8'
]

// Print the values
for (s in map) {
    println s + ": " + map[s]
}

다음과 같이 출력을 얻으려고합니다.

iPhone: iWebOS
Android: 2.3.3
Nokia: Symbian
Windows: WM8

누군가이 작업을 수행하는 방법에 대해 자세히 설명해 주시겠습니까?



답변

클로저로 매우 간단합니다.

def map = [
           'iPhone':'iWebOS',
           'Android':'2.3.3',
           'Nokia':'Symbian',
           'Windows':'WM8'
           ]

map.each{ k, v -> println "${k}:${v}" }


답변

또는 Groovy Docs에for 표시된 것처럼 루프를 사용할 수 있습니다 .

def map = ['a':1, 'b':2, 'c':3]
for ( e in map ) {
    print "key = ${e.key}, value = ${e.value}"
}

/*
Result:
key = a, value = 1
key = b, value = 2
key = c, value = 3
*/

클로저 for와 반대로 루프 를 사용하면 얻을 수있는 이점 중 하나 는 each클로닝 내부에서 중단 점에 도달 할 수 없기 때문에 디버깅하기가 더 쉽다는 것입니다 each(Netbeans를 사용 하는 경우).


답변

for 루프를 사용할 때 s의 값은 Map.Entry 요소입니다. 이는 s.key에서 키와 s.value에서 값을 가져올 수 있음을 의미합니다.


답변

다른 옵션 :

def map = ['a':1, 'b':2, 'c':3]
map.each{
  println it.key +" "+ it.value
}


답변