c# - Get all unmatching elements between two large lists -
i have dictionary<string, foo>
x amount of elements. dictionary key containing foo.id
. have list<foo> newfoos
, in case contains little less elements dictionary. do, have new list<foo>
elements in newfoos
not in dictionary.
i solved using:
var list = mydict.where(x => newfoos.all(y => y.id != x.key)).tolist();
but problem performance in case, must easier , faster way? , please not using except/intersect , override equals
public class program { public static dictionary<int, foo> mydict { get; set; } = new dictionary<int, foo>(); private static void main(string[] args) { (int = 0; < 2000; i++) { mydict.add(i, new foo() {id = i}); } var newfoos = new list<foo>(); (int = 0; < 1500; i++) { newfoos.add(new foo() { id = }); } var list = mydict.where(x => newfoos.all(y => y.id != x.key)).tolist(); } } public class foo { public int id { get; set; } //more properties }
when using testcode above find not slow, principle same
var list = newfoos.where(x => !mydict.containskey(x.id)).tolist();
this should more efficient since checking if key in dictionary should faster looking item in list.
Comments
Post a Comment