我有一本字典,其中的项目是(例如):

  • “A”,4
  • “B”,44
  • “bye”,56
  • “C”,99
  • “D”,46
  • “6672”,0

  • 我有一个 list :
  • “A”
  • “C”
  • “D”

  • 我想从字典中删除列表中键为而不是的所有元素,最后,我的字典将为:
  • “A”,4
  • “C”,99
  • “D”,46

  • 我能怎么做?

    最佳答案

    构造新的Dictionary以包含列表中的元素会更简单:

    List<string> keysToInclude = new List<string> {"A", "B", "C"};
    var newDict = myDictionary
         .Where(kvp=>keysToInclude.Contains(kvp.Key))
         .ToDictionary(kvp=>kvp.Key, kvp=>kvp.Value);
    

    如果修改现有字典很重要(例如,它是某个类的只读属性)
    var keysToRemove = myDictionary.Keys.Except(keysToInclude).ToList();
    
    foreach (var key in keysToRemove)
         myDictionary.Remove(key);
    

    注意ToList()调用-实现要删除的键列表很重要。如果您尝试在未实现keysToRemove的情况下运行代码,则可能会出现异常,例如“集合已更改”。

    10-05 22:21