我有一个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