2012-04-05 19 views
130

मेरे पास एक बहुत ही आसान काम है जिसे मैं ग्रोवी में करने की कोशिश कर रहा हूं लेकिन इसे काम पर नहीं लग रहा है। मैं बस एक नक्शा वस्तु के माध्यम से 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 

कोई ऐसा करने के तरीके पर विस्तृत कृपया सकते हैं ??

+0

आप जवाब में देखा है, समस्या यह है कि एक नक्शे पर पुनरावृत्ति आप "प्रविष्टियां" का एक संग्रह देता है, तो आप यह सोचते हैं कर रहे थे यह आप कुंजी देना होगा और क्या तुम करोगी मूल्यों को देखो। यदि आप इसे इस तरह से करना चाहते हैं, तो map.keySet() पर पुन: प्रयास करें और शेष आपके काम के अनुसार काम करेंगे। –

+0

यदि आप लूप के अंदर अपने कोड में 's.key' और' s.value' का उपयोग करते हैं तो यह काम करना चाहिए। – inblueswithu

उत्तर

249

को बंद करने के साथ काफी सरल:

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

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

जिज्ञासा से, यह ग्रोवी भाषा दस्तावेज़ों में कहां से प्रलेखित है (** मुझे नहीं लगता कि यह है! **)? मुझे लगता है कि मैं एक ग्रोवी न्यूबीज के परिप्रेक्ष्य से सोच रहा हूं, * आप इसे कैसे जानते थे? * – smeeb

+5

@ सेमेब: सबकुछ अच्छी तरह से प्रलेखित है, यहां एक नज़र डालें: http://www.groovy-lang.org/groovy- dev-kit.html # _iterating_on_maps – Jack

13

जब पाश के लिए उपयोग करते हुए, एस के मूल्य, एक Map.Entry तत्व है जिसका अर्थ है आप s.key से कुंजी और एस से मूल्य प्राप्त कर सकते हैं कि

+0

व्याख्या करने के लिए धन्यवाद * क्यों * ओपी का कोड – dj18

74

वैकल्पिक रूप से आप एक for पाश इस्तेमाल कर सकते हैं .Value रूप 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 
*/ 

एक लाभ each के विरोध के रूप में बंद करना आसान डीबगिंग है, क्योंकि आप each बंद (नेटबीन्स का उपयोग करते समय) के अंदर ब्रेक पॉइंट नहीं मार सकते हैं।

+0

काम नहीं करता है मैं जीजीटीएस 3.2 का उपयोग करता हूं और नियमित रूप से बंद करने में ब्रेक पॉइंट सेट करता हूं ("प्रत्येक" बंद करने सहित)। समस्या बंद होने के माध्यम से चरण 6 का उपयोग कर रही है, क्योंकि यह पूरी चीज पर जायेगी। तकनीकी रूप से, आप F5 को कई बार हिट कर सकते हैं और अंत में वहां समाप्त हो सकते हैं, लेकिन ब्रेक पॉइंट तेज है। – Philip

+0

अद्यतन उत्तर। मैं नेटबीन्स का उपयोग कर रहा हूं और ग्रोवी/ग्रेल्स की डिबगिंग उप-पैरा है। – ubiquibacon

+1

प्लस आप लूप के लिए तोड़ सकते हैं, न कि '.each 'में। –

10

एक अन्य विकल्प:

def map = ['a':1, 'b':2, 'c':3] 
map.each{ 
    println it.key +" "+ it.value 
} 
संबंधित मुद्दे