2012-03-27 17 views
6

संभव डुप्लिकेट पुनरावृत्ति:
Modifying .NET Dictionary while Enumerating through itहटाया जा रहा है एक शब्दकोश से अधिक

मैं जब मैं से अधिक पुनरावृति और कुछ कार्य कर एक वस्तु शब्दकोश है। किसी शर्त के आधार पर मुझे या तो कुंजीव्यू जोड़ी को हटा या रखना चाहिए, जिसे मैं वर्तमान में चालू कर रहा हूं। एक शब्दकोष से एक keyvaluepair को हटाने के लिए सबसे अच्छा तरीका क्या है? मैं हटा देते हैं लेकिन यकीन है कि कैसे तो यह उपयोग करने के लिए भी सबसे कारगर तरीका अपने मुख्य शब्दकोश से या अगर thats नष्ट करने के लिए क्या करने के लिए यह

धन्यवाद नहीं im करने के लिए एक अलग वस्तु शब्दकोश का उपयोग करने के तत्वों का ट्रैक रखने की कोशिश की

उत्तर

9

उन कुंजीों की एक सूची रखें जिन्हें आप निकालना चाहते हैं उन्हें हटाएं। फिर, जब आप पूरा कर लेंगे, तो इस सूची में पुन: प्रयास करें, आपके द्वारा संग्रहीत प्रत्येक कुंजी पर myDictionary.Remove(key) पर कॉल करें।

+5

जिसका अर्थ 2 पुनरावृत्तियों, फ़ाइलों को हटाने के लिए और अन्य आइटम को हटाने के लिए होगा, क्यों न केवल उन वस्तुओं को कॉपी करें जिन्हें आप अन्य शब्दकोश में हटाना नहीं चाहते हैं? –

+1

@Euclides - मैं ईमानदारी से उस बारे में सोचा नहीं होगा। एक ही शब्दकोश के साथ समाप्त होने के लिए एक अनिवार्य कारण के बिना, संशोधित, मैं उम्मीद करता हूं कि ज्यादातर मामलों में अधिक कुशल बनें। – Rawling

+1

"उन वस्तुओं को कॉपी क्यों न करें जिन्हें आप अन्य शब्दकोश में हटाना नहीं चाहते हैं?" यदि हटाए जाने वाले आइटमों की संख्या बहुत कम है या निकासी शायद ही कभी होती है, तो यह बहुत ही बेहतर होगा। तो सिफारिशें डेटा एक्सेस पैटर्न पर निर्भर करती हैं – Imi

4

एक अलग शब्दकोश का उपयोग करने का प्रयास करें और डालने वाले डा कुंजी मानों को हटाने के लिए कुंजी मान को चिह्नित करने के बजाय, जिसे आप रखना चाहते हैं और पुनरावृत्ति पर यह करें: old_map = new_map।

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