比较c#中的两个类列表

时间:2015-12-13 17:45:51

标签: c#

我有这门课: .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都可能包含超过 500K到100万的对象。

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

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

resultEdit应包含list1list2中存在的对象,但val_1val_2,...之一{{{ 1}}在val_nlist1之间有所不同。

示例:

list2

结果应该是:

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} };

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

那么任何好的,快速的方法来实现这一目标吗?

注意:处理时间对我来说非常重要,内存也很重要

1 个答案:

答案 0 :(得分:2)

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

  1. 为每个元素添加排序功能。所以,我会将{“A”,1,2,3,4}转移到&lt; string,int&gt;的对象,其中字符串是名称(“A”),int是数字1234(取决于n的值。如果它太长,只需使用字符串)。
  2. 现在,您可以在适当的数据结构中对元素进行排序(&lt;“A”,1234&gt;将在&lt;“A”之前,1235&gt;)。我会在每个键中使用带有排序列表的字典。
  3. 现在更容易找到不同的结果。例如,对于list1中的&lt;“A”,1234“&gt;,只需检查它是否存在于list2中的”A“键下。此搜索现在应该更快。