2009-11-30 70 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