如何获得两个给定Hashtables的联合,交集和差异?

时间:2014-05-07 04:21:17

标签: linq hashtable union intersection difference

我有两个Hashtables。

我正在尝试获得联合,交集和差异,但我如何在这两个哈希表之间进行循环和比较hashtable1.Count不等于hashtable2.Count,有人知道怎么用 linq 吗?

public Hashtable operator +(Hashtable g1, Hashtable g2) //union
    {
        Hashtable result = new Hashtable();
        //loop
        {
            if(!result.Contains(g1[i]))
            {
                result.Add(g1[i]);
            }
            if(!result.Contains(g2[i]))
            {
                result.Add(g2[i]);
            }
        }
        return result;
    }
    public Hashtable operator -(Hashtable g1, Hashtable g2) //intersection 
    {
        Hashtable result = new Hashtable();
        //loop
        {
            if (g1[i] == g2[i])
            {
                result.Add(g1[i]);
            }
        }
        return result;
    }
    public Hashtable operator /(Hashtable g1, Hashtable g2) //difference 
    {
        Hashtable result = new Hashtable();
        //loop
        {
            if (g1[i] != g2[i])
            {
                result.Add(g1[i]);
            }
        }
        return result;
    }

1 个答案:

答案 0 :(得分:0)

如果你使用Hashtable而不是IEnumerable<T>,那么使用Dictionary<TKey, TValue>扩展方法会很困难。

因为Hashtable不是泛型类型。

所以没有Hashtable.Union可用,不是Hashtable.Keys.Union

您必须执行类似

的操作
hashtable1.Keys.Cast<int>().Union(hashtable2.Keys.Cast<int>());

但是......如果键不是int会发生什么?

如果您将Hashtable更改为Dictionary<TKey, TValue>,您就可以执行以下操作

var resultDictionary = dic1.Intersects(dic2).ToDictionary(m => m.Key, m => m.Value);

var resultDictionary = dic1.Except(dic2).ToDictionary(m => m.Key, m => m.Value);