两个泛型集合,字段一致,两个的数据规模大概在10w左右的数据量,如何快速的得到交集,差集
demo代码如下:
class Program
{
static void Main(string[] args)
{
DataTable table1 = new DataTable();
table1.Columns.Add("Id");
table1.Columns.Add("Name");
table1.Columns.Add("Age");
DataTable table2 = new DataTable();
table2.Columns.Add("Id");
table2.Columns.Add("Name");
table2.Columns.Add("Age");
for (int i = 0; i < 150000; i++)
{
var dr = table1.NewRow();
dr[0] = i.ToString();
dr[1] = "Name" + i.ToString();
dr[2] = 23;
table1.Rows.Add(dr);
if (i<=140000)
{
var dr1 = table2.NewRow();
dr1[0] = i.ToString();
dr1[1] = "Name" + i.ToString();
dr1[2] = 23;
table2.Rows.Add(dr1);
}
}
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
var same = table1.AsEnumerable().Where(t1 => table2.AsEnumerable().Select(t2 => t2.ItemArray[0].ToString()).Contains(t1.ItemArray[0].ToString())).ToList();
stopwatch.Stop();
var sec1 = stopwatch.ElapsedMilliseconds;
}
}
class student
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
经过测试 sec1=2030054毫秒
等待的时间太长,哪位大神 能指明下方向,如何提升性能
回答
List<T> list1; List<T> list2;
class eq:IEqualityComparer<T>{
bool Equals(T x, T y)=> x.Id==y.Id
int GetHashCode(T t){}
// 你自己的逻辑判断2个对象是否相等.
}
list1.Except(list2, new eq()); //差集,
list1.Intersect (list2, new eq()); Intersect 交集
THE END
二维码