【问题标题】:deleting key,value pairs from a dictionary given a list of keys to delete给定要删除的键列表,从字典中删除键、值对
【发布时间】:2012-10-09 19:34:32
【问题描述】:

我有一个List<string> AllowedList 和一个Dictionary<string,List<string>> MyDictionary

对于字典中的每个键,我想检查它是否在 AllowedList 上,如果不是,我想从字典中删除键和值。

我凭直觉尝试了这似乎是我想要的:

foreach (string key in MyDictionary.Keys)
{
    if (!AllowedList.Contains(key)) MyDictionary.Remove(key);
}

但是,我遇到了InvalidOperationException

集合已修改;枚举操作可能无法执行。

我确信可能有一个简单的方法来解决这个问题,但我没有立即看到它。

【问题讨论】:

    标签: c#-4.0 dictionary


    【解决方案1】:

    您可以使用Enumerable.Except 查找不在字典中的键:

    foreach (var key in MyDictionary.Keys.Except(AllowedList).ToList())
        MyDictionary.Remove(key);
    

    ToList() 创建一个新的集合差异列表并防止异常。

    【讨论】:

    • +1 我认为第一行可以简化为var keys = MyDictionary.Keys;
    • Seismoid 的解决方案也是一个有效的解决方案。不过,我确实最喜欢这个 linq set 差异建议。
    【解决方案2】:

    您可以/应该将要删除的键存储在临时列表中,然后在额外的 for 循环中执行所有删除操作。

    List<TKey> templist = new List<TKey>();
    
    foreach (var x in MyDictionary)
    {
        if (!AllowedList.Contains(x.Key))
            templist .Add(x.Key);
    }
    foreach (TKey item in templist )
    {
        MyDictionary.Remove(item);
    }
    

    这也可能会有所帮助: How to delete entries from a dictionary using the value

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多