2009-11-30 13 views
6

İkinci hashtable yeni anahtarlar içeriyorsa, bir hashtable değerini başka bir hashtable,güncelleme başka bir hashtable tarafından hashtable?

ile nasıl güncelleyebilirim, sonra 1. hashtable değerini güncellemelidir.

+0

Bize nasıl yardımcı olabileceğimizi görmek için bize gösterilecek herhangi bir kodunuz var mı? Başka bir deyişle, ne denediniz? –

+0

Yani iki hash tablosunu birleştirmek mi istiyorsunuz? –

+0

evet eski hashtable ile son. – shahjapan

cevap

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

Gerekirse bunu bir uzantı yöntemine dönüştürebilirsiniz (.NET 3.5 veya daha yeni kullandığınızı varsayarak).

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

Bu, "ikinci hashtable, yeni anahtarlar içeriyorsa 1'e eklenmesi gerekiyorsa" gerekliliklerinden birini yakalamaz ve büyük olasılıkla bir istisna atar. – ParmesanCodice

+5

@ParmesanCodice: Bu gereksinimi tam olarak karşılar *. Neden bunu deniyor ve kendin görmüyorsun? MSDN belgelerinden: "Ayrıca, Hashtable'da bulunmayan bir anahtarın değerini ayarlayarak yeni öğeler eklemek için Öğe özelliğini kullanabilirsiniz ... Ancak, belirtilen anahtar zaten Hashtable'da varsa, Öğe özelliğini ayarlama eski değerin üzerine yazıyor. " http://msdn.microsoft.com/en-us/library/system.collections.hashtable.item.aspx – LukeH

+0

@Luke, özür dilerim Bu davranıştan haberdar değildim. – ParmesanCodice

0

(Sözlük göre) bu konuda bazı kod:

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

Ben LINQ kullanarak daha zarif bir çözüm var eminim (2.0 olsa da, kod;)).

+0

Bu, derlenmiyor. Gerçek C# ya da sadece sözde kod mu? – LukeH

+0

@Luke: Teşekkür ederim, bu sorulara cevaplar verirsem C# 'da kodlamaya başlamalıyım. – Bobby

+0

Simdi düzgün derler ve Sözlük 'için düzgün çalışır, ancak" Hashtable "için çalışmayacaktır. – LukeH