比较c#中的两个类列表

本文关键字:两个 列表 比较 | 更新日期: 2023-09-27 18:26:46

我有这个类:.NET Framework 3.5

Class my_class {
 string name;
 int val_1;
 int val_2;
 .
 . 
 .
 int val_n;
}

我有以下列表:

List<my_class> list1;
List<my_class> list2;
List<my_class> result1;
List<my_class> result2;
List<my_class> resultEdit;

list1list2都可能包含超过500 K到100万的对象。

result1列表应包含在list1上存在而在list2上不存在的对象。

result2列表应包含在list2上存在而在list1上不存在的对象。

resultEdit应该包含list1list2中都存在的对象,但val_1val_2,。。。CCD_ 15在CCD_ 16和CCD_。

示例:

List1 = { {"A",1,2,3,4} , {"B",1,2,3,4}, {"C",1,2,3,4} };
List1 = { {"A",1,2,3,4} , {"D",1,2,3,4}, {"C",1,4,3,4} };

结果应该是:

result1 = {{"B",1,2,3,4}};
result2 = {{"D",1,2,3,4}};
resultEdit1 = {{"C",1,2,3,4}};

我知道有很多方法可以做到这一点,但由于每个列表中的项目数量很大(每个列表中超过50万个项目),处理时间不好!

那么,有什么好的、快速的方法可以实现这一点吗?

注意:处理时间对我和内存都很重要。

比较c#中的两个类列表

好吧,描述中缺少了很多东西,但在比较之前,我会对数据进行一些预处理:

  1. 为每个元素添加排序功能。因此,我将{"A",1,2,3,4}转移到<string,int>,其中string是名称("A"),int是数字1234(取决于n的值。如果太长,只需使用字符串)
  2. 现在,您可以在适当的数据结构中对元素进行排序(<"a",1234>位于<"a",1235>之前)。我会用一本字典,每个键都有一个排序列表
  3. 现在更容易找到不同的结果。例如,对于<"A",1234">在列表1中,只需检查它是否存在于列表2中的键"A"下。这种搜索现在应该会快得多