linq 一行从 IDictionary 中删除其键不在另一个字典中的元素



我有

IDictionary<string,object> d1;
Dictionary<string, object> d2;

我需要从 d1 中删除所有不在 d2 中的条目。

我知道我可以用 for 循环等来做到这一点,但那是上个世纪的事情;我想把它做好。

我到了

   d1.Where(x => {return d2.ContainsKey(x.key);});

但不知道下一步该怎么做

LINQ 不是为修改现有元素而设计的,但您始终可以创建新字典。例如:

d1 = d1.Where(x => d2.ContainsKey(x.Key))
       .ToDictionary(x => x.Key, x => x.Value);

或:

d1 = d1.Keys.Intersect(d2.Keys)
       .ToDictionary(key => x.Key, key => d1[key]);

正如其他人所说,如果你更热衷于做Remove操作,我只会循环。例如:

foreach (var key in d1.Keys.Except(d2.Keys).ToList())
{
    d1.Remove(key);
}

(顺便说一下,我不确定为什么在示例代码中使用语句 lambda。

LINQ 用于查询。 您查询的信息是来自不在 d2 中的d1的密钥。 除了错过NOT(除非你不是故意在你的要求中说"不")。你已经有了。 在实际执行某些操作时,最好使用 foreach 循环而不是 LINQ 来完成:

foreach(var pair in d1.Where(x=> !d2.ContainsKey(x.Key)).ToList())
{
    d1.Remove(pair.Key)
}

请注意,需要ToList来确保在迭代集合时不会修改集合。

相关内容

  • 没有找到相关文章

最新更新