2012-02-21 28 views
11

मैं जावा में एक शब्दकोश में हर आइटम के माध्यम से जाना चाहता हूँ। मुझे क्या करना चाहते हैं स्पष्ट करने के लिए, इस सी # कोडशब्दकोश के लिए जावा में Foreach पाश

Dictionary<string, Label> LableList = new Dictionary<string, Label>(); 
foreach (KeyValuePair<string, Label> z in LabelList); 

मैं ऐसा करने के तरीके पता नहीं है जावा है, उदाहरण के लिए मैं इस

for(Object z: dic) 

किया है, लेकिन यह कहना है कि वह iterable नहीं है । कृपया सलाह दें ......

उत्तर

31

मुझे लगता है कि आपके पास Map<String, Label> है जो जावा अंतर्निहित शब्दकोश संरचना है। जावा आपको सीधे Map (यानी यह Iterable लागू नहीं करता है) पर फिर से शुरू करने देता है क्योंकि यह वास्तव में आप जिस चीज पर असर डाल रहे हैं उस पर अस्पष्ट होगा।

यह केवल कुंजी, मूल्य या प्रविष्टियों (दोनों) के माध्यम से पुनरावृत्त करने का विकल्प है।

उदा।

Map<String, Label> map = new HashMap<String, Label>(); 
//... 

for (String key : map.keySet()) { 
} 

for (Label value : map.values()) { 
} 

for (Map.Entry<String, Label> entry : map.entrySet()) { 
    String key = entry.getKey(); 
    Label value = entry.getValue(); 
} 

आपका सी # कोड प्रविष्टियों (अंतिम उदाहरण) पर पुनरावृत्ति जैसा ही लगता है।

+0

इस प्रकार मैं इसे परिभाषित करता हूं: शब्दकोश <स्ट्रिंग, लेबल> dic = null; मुझे मानचित्र के बारे में कुछ भी पता नहीं है ... क्या यह किसी प्रकार का शब्दकोश है? – Daniel

+3

@ डैनियल जवाडोक पढ़ना आपको बताएगा 'नोट: यह वर्ग अप्रचलित है। नए कार्यान्वयन को इस वर्ग को विस्तारित करने के बजाय, मानचित्र इंटरफ़ेस को कार्यान्वित करना चाहिए। ', इसलिए आपको नए मानचित्र वर्गों में से एक का उपयोग करना चाहिए। आप शायद 'हैश मैप' चाहते हैं - जो आपको – Voo

+1

काम करने के लिए आवश्यक नए कार्यों को भी लागू करता है, आश्चर्यजनक, मैं लंबे समय से भूल गया था कि हैशटेबल में एक शब्दकोश सुपरक्लास था। –

0

आपका सबसे अच्छा शर्त यह उपयोग करने के लिए है:

for (String key : LableList.keys()) { 
    Label value = LableList.get(key); 

    // do what you wish with key and value here 
} 

जावा में तथापि, एक बेहतर शर्त के रूप में आप नेट में लेकिन मानचित्र उपवर्गों से एक का उपयोग करने के लिए होगा, उदा शब्दकोश का उपयोग नहीं करने के लिए है हैश मैप। आप इस तरह इनमें से किसी एक के माध्यम से पुनरावृति कर सकते हैं:

for (Entry<String, Label> e : myMap.entrySet()) { 
    // Do what you wish with e.getKey() and e.getValue() 
} 

तुम भी आधिकारिक जावाडोक में शब्दकोश का उपयोग कर के खिलाफ सलाह दी जाती है।

+1

शब्दकोश।कुंजी() एक गणना देता है जो Iterable लागू नहीं करता है और इस प्रकार foreach पाश में उपयोग नहीं किया जा सकता है। आपका कोड संकलित नहीं होगा। – Philipp

+0

मेरे कामकाजी कोड को बताएं :) –

+0

तो या तो मेरा ग्रहण कंपाइलर टूटा हुआ है (जो दिखाता है और त्रुटि), या हम एक ही चीज़ के बारे में बात नहीं कर रहे हैं। (यह नहीं कि शब्दकोश किसी भी तरह से मायने रखता है) – Philipp

3

java.util.Map शब्दकोश equvivalent है और नीचे कैसे आप प्रत्येक प्रविष्टि

for(Map.Entry<K, V> e : map.entrySet()) 
{ 
    System.out.println(e.getKey()+": "+e.getValue()); 
} 
0

मैं एक HashMap (ख) में एक HashMap (क) की सामग्री को जोड़ने की कोशिश कर रहा था के माध्यम से पुनरावृति कर सकते हैं पर एक उदाहरण है। "->"

a.forEach((k, v) -> b.put(k, v)); 

तुम मेरे उदाहरण में हेरफेर कर सकते हैं क्या कभी आप के दूसरे पक्ष पर करना चाहते हैं:

मैं इसे सरल एक HashMap इस तरह के माध्यम से पुनरावृति करने के लिए मिला।

ध्यान दें कि यह एक लैम्ब्डा अभिव्यक्ति है, और आपको जावा 1.8 (जावा 8) या बाद में काम करने के लिए इसका उपयोग करना होगा। :-)

संबंधित मुद्दे