炫意html5
最早CSS3和HTML5移动技术网站之一

两个泛型集合,字段一致,两个的数据规模大概在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 交集

炫意HTML5 » 两个泛型集合,字段一致,两个的数据规模大概在10w左右的数据量,如何快速的得到交集,差集

Java基础教程Android基础教程