2009-11-30 72 views
6

我怎麼能由另一個哈希表更新一個哈希表的值,通過另一個散列表更新散列表?

如果第二哈希表中包含新的密鑰則必須將它們添加到別的1日應更新哈希表1的值。

+0

您是否有任何代碼向我們展示,看看我們如何提供幫助?換句話說,你有什麼嘗試? – 2009-11-30 14:03:51

+0

所以你正在尋找合併兩個哈希表? – 2009-11-30 14:04:54

+0

是舊的哈希表最新的。 – shahjapan 2009-12-02 10:06:15

回答

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

這並沒有捕獲其中一個要求,「如果第二個哈希表包含新密鑰,那麼它們必須添加到1st」,並且很可能會引發異常 – ParmesanCodice 2009-11-30 14:16:23

+5

@ParmesanCodice:它完全符合*要求*。你爲什麼不嘗試自己看看?從MSDN文檔:「您還可以通過設置Hashtable中不存在的鍵的值來使用Item屬性添加新元素...但是,如果指定的鍵已經存在於Hashtable中,請將Item屬性覆蓋舊的價值。「 http://msdn.microsoft.com/en-us/library/system.collections.hashtable.item.aspx – LukeH 2009-11-30 14:28:37

+0

@Luke,我的歉意,我沒有意識到這種行爲。 – ParmesanCodice 2009-11-30 17:50:36

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

這不會編譯。這是否意味着真正的C#或只是僞代碼? – LukeH 2009-11-30 14:27:31

+0

@Luke:謝謝,如果我在這些問題上給出答案,我真的應該開始使用C#編寫代碼... – Bobby 2009-11-30 14:35:14

+0

它現在編譯好了,並且對於'Dictionary '正常工作,但它對'Hashtable'不起作用。 – LukeH 2009-11-30 15:57:00