用另一个哈希表更新哈希表?

6

如何通过另一个哈希表更新一个哈希表的值,

如果第二个哈希表包含新的键,则必须将它们添加到第一个哈希表中,否则应该更新第一个哈希表的值。


你有任何可以展示的程式碼嗎?这样我们才能了解如何协助你。换句话说,你尝试过什么? - Michael Todd
所以你想要合并两个哈希表? - Ryan Emerle
是的,确切地说,它与旧哈希表一起是最新的。 - shahjapan
2个回答

17
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;
        }
    }
}

这段代码没有满足其中的一个要求:“如果第二个哈希表包含新的键,则它们必须添加到第一个哈希表中”,因此很可能会抛出异常。 - ParmesanCodice
5
@ParmesanCodice:它完全符合要求。为什么不试试看呢?根据MSDN文档:“您还可以使用Item属性通过设置不存在于Hashtable中的键的值来添加新元素...然而,如果指定的键已经存在于Hashtable中,则设置Item属性会覆盖旧值。”。 - LukeH
@Luke,抱歉我不知道这个行为。 - ParmesanCodice
如果C#有类似hashtable1.Update(hashTable2)这样的功能就太好了 :-)或者像Hashtable.Update(h1, h2)这样的写法也不错。 - shahjapan
@shahjapan:你可以轻松地创建自己的扩展方法来实现这一点。我会更新答案... - LukeH

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版本中编码;))。

这个无法编译。它是真正的C#代码还是伪代码? - LukeH
@Luke:谢谢,如果我要回答这样的问题,我真的应该开始用C#编程... - Bobby
现在编译很好,对于“Dictionary<K,V>”可以正确运行,但对于“Hashtable”则无法正常工作。 - LukeH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接