2009-11-30 13 views
6

मैं एक hashtable के बाद एक hashtable के मूल्यों को अपडेट कर सकते कैसे,अद्यतन हैशटेबल किसी अन्य हैशटेबल द्वारा?

अगर दूसरा hashtable नई चाबी तो वे किसी और 1 में जोड़ा जाना चाहिए 1 hashtable का मान अपडेट लेना चाहिए।

+0

क्या आपके पास कोई दिखाने के लिए कोई कोड है, यह देखने के लिए कि हम कैसे मदद कर सकते हैं? दूसरे शब्दों में, आपने क्या प्रयास किया है? –

+0

तो क्या आप दो हैश टेबल मर्ज करना चाहते हैं? –

+0

हाँ पुराने हैशटेबल के साथ बिल्कुल नवीनतम। – shahjapan

उत्तर

16
foreach (DictionaryEntry item in second) 
{ 
    first[item.Key] = item.Value; 
} 

यदि आवश्यक हो तो आप इसे एक विस्तार विधि में रोल कर सकते हैं (मानते हैं कि आप .NET 3.5 या नए का उपयोग कर रहे हैं)।

Hashtable one = GetHashtableFromSomewhere(); 
Hashtable two = GetAnotherHashtableFromSomewhere(); 

one.UpdateWith(two); 

// ... 

public static class HashtableExtensions 
{ 
    public static void UpdateWith(this Hashtable first, Hashtable second) 
    { 
     foreach (DictionaryEntry item in second) 
     { 
      first[item.Key] = item.Value; 
     } 
    } 
} 
+0

यह किसी एक आवश्यकता को कैप्चर नहीं करता है "अगर दूसरे हैशटेबल में नई चाबियाँ हैं तो उन्हें 1 में जोड़ा जाना चाहिए", और संभवतः एक अपवाद फेंक देगा – ParmesanCodice

+5

@ परमेसन कोडिस: यह उस आवश्यकता * बिल्कुल * को पूरा करता है। आप इसे क्यों नहीं देखते और खुद के लिए देखते हैं? एमएसडीएन दस्तावेज से: "आप एक कुंजी के मान को सेट करके नए तत्व जोड़ने के लिए आइटम प्रॉपर्टी का भी उपयोग कर सकते हैं जो हैशटेबल में मौजूद नहीं है ... हालांकि, यदि निर्दिष्ट कुंजी हैशटेबल में पहले से मौजूद है, तो आइटम प्रॉपर्टी सेट करना पुराने मूल्य को ओवरराइट करता है। " http://msdn.microsoft.com/en-us/library/system.collections.hashtable.item.aspx – LukeH

+0

@ ल्यूक, मेरी माफ़ी, मुझे इस व्यवहार से अवगत नहीं था। – ParmesanCodice

0

उस पर कुछ कोड (शब्दकोश के आधार पर):

 foreach (KeyValuePair<String, String> pair in hashtable2) 
     { 
      if (hashtable1.ContainsKey(pair.Key)) 
      { 
       hashtable1[pair.Key] = pair.Value; 
      } 
      else 
      { 
       hashtable1.Add(pair.Key, pair.Value); 
      } 
     } 

मैं वहाँ एक और अधिक सुरुचिपूर्ण समाधान LINQ का उपयोग कर यकीन है (हालांकि, मैं 2.0 में कोड;))।

+0

यह संकलित नहीं करता है। क्या यह असली सी # या सिर्फ छद्म कोड होना है? – LukeH

+0

@ ल्यूक: धन्यवाद, मुझे वास्तव में सी # में कोडिंग शुरू करनी चाहिए यदि मैं ऐसे प्रश्नों पर उत्तर देता हूं ... – Bobby

+0

यह अभी ठीक है और 'डिक्शनरी ' के लिए सही तरीके से काम करता है, लेकिन यह 'हैशटेबल' के लिए काम नहीं करेगा। – LukeH

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