从相对hashset中查找字典中缺少的元素

时间:2014-10-15 20:37:31

标签: c# c#-3.0

我是C#的初学者..我的情况是我有

的字典
var enteries = new Dictionary<int, Entry>();

我正在通过

迭代它
foreach (KeyValuePair<int, Entry> entry in enteries)

我有一个hashset<int>,其中包含1,2,3等所有键。有时字典缺少一个键,我怎么知道我在字典中错过了当前在字典中迭代的键?

基本上我尝试编写CVS文件,我需要知道是否缺少密钥,以便我可以为该id写一些空行。 我也希望对事情进行排序..

看起来有一个误解:

Suppose enteries have keys, 238, 260 
hashset has 238,260,250 

当我遍历字典中的每个键,对,有一个缺失的元素,即250,我将如何输出,我应该输出一些例子。

3 个答案:

答案 0 :(得分:0)

  

我怎么知道我正在迭代的当前密钥   hashset中缺少字典?

假设您有一个HashSet<int> hashSet实例,您可以使用Contains方法来确定此哈希集中是否包含整数值并采取相应措施:

HashSet<int> hashSet = ...

foreach (KeyValuePair<int, Entry> entry in enteries)
{
    if (hashSet.Contains(entry.Key))
    {
        // The current key is contained within the hashSet
    }
    else 
    {
        // The current key is not contained within the hashSet
    }
}

答案 1 :(得分:0)

改变你的观点。 据我所知,在你的HashSet中是每个需要的密钥。因此,遍历HashSet并找到Dictionary中每个HashSet-Entry的键。

答案 2 :(得分:0)

最简单的代码不是最有效的,但会起作用;将一组键合并在一起,然后迭代:

foreach (int key in enteries.Keys.Union(yourHashSet)) {
    Entry entry;
    if (enteries.TryGetValue(key, out entry)) {
        // The key is in the dictionary; the entry variable contains the value.
    } else {
        // The key is not in the dictionary.
    }
}

如果要对键进行排序,只需在union之后应用此操作:

foreach (int key in enteries.Keys.Union(yourHashSet).OrderBy(i => i)) {