我有一個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();
但這樣做的問題是在我的情況下的性能,它必須是一些更容易和更快的方式?而請勿使用除/交叉,覆蓋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
}
當使用我的testcode上面我覺得不慢,但原理是一樣的
'MyDict'我討厭那個變量名。 – JonH
提高工作的代碼是題外話和適合更好地http://codereview.stackexchange.com/ –
@TimSchmelter - 真笑 – JonH