我有dictionary<string, Foo>
X个元素。词典密钥包含Foo.Id
。我还有一个List<Foo> newFoos
,在我的情况下,它包含的元素比字典少一些。因此,我想做的是拥有一个List<Foo>
包含所有newFoos
但不在字典中的元素的新内容。
我通过使用以下方法解决了这个问题:
var list = MyDict.Where(x => newFoos.All(y => y.Id != x.Key)).ToList();
但是在我看来,这是性能问题,它一定是更简便,更快捷的方法吗?并且请不要通过使用Except / Intersect并覆盖Equals
public class Program {
public static Dictionary<int, Foo> MyDict { get; set; } = new Dictionary<int, Foo>();
private static void Main(string[] args) {
for (int i = 0; i < 2000; i++) {
MyDict.Add(i, new Foo() {Id = i});
}
var newFoos = new List<Foo>();
for (int i = 0; i < 1500; i++) {
newFoos.Add(new Foo() { Id = i });
}
var list = MyDict.Where(x => newFoos.All(y => y.Id != x.Key)).ToList();
}
}
public class Foo {
public int Id { get; set; }
//More properties
}
当使用上面的测试代码时,我发现它并没有那么慢,但是原理是一样的
var list = newFoos.Where(x => !MyDict.ContainsKey(x.Id)).ToList();
这应该更有效,因为检查键是否在字典中比在列表中查找项目要快。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句