C# ,.net 对比两个List的方法 亲测
方案一:for等循环方法 效率过慢 数据量过大时容易卡死 不建议使用
方案二:取交集
var intersection = datalist.Intersect(ExelLsit., new TarGetComparer()).ToList(); //需要重写IEqualityComparer Equals /// </summary> //public class TarGetComparer : IEqualityComparer<arko_dim_update_id_trial> //{ // public bool Equals(arko_dim_update_id_trial x, arko_dim_update_id_trial y) // { // try // { //需要对比的字段 // return x.fd_table == y.fd_table // && x.fd_field == y.fd_field // && x.fd_id_field == y.fd_id_field // && x.fd_id_value == y.fd_id_value; //如需对比整条数据 可直接return x==y; // } // catch (Exception ex) // { // return base.Equals(x); // } // } // public int GetHashCode(arko_dim_update_id_trial obj) // { // return 1; // } //}
相比循环较快 但当数据量超过十万以上也会很慢 不建议使用‘;
方案三:此时需要换个思路 采用分组来对比
//首先 var existenceList = list1.Concat(list2).ToList();//合并两个集合 //分组找到重复数据 var existenceList = existenceList.GroupBy(x => x) .Where(x => x.Count() > 1) .ToList(); //找到不重复数据 var existence = existenceList.GroupBy(x => x).ToList();
此时不仅节省代码 效率更是大大提升;
学如逆水行舟 不进 则退!