比较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;
list1
和list2
都可能包含超过500 K到100万的对象。
result1
列表应包含在list1
上存在而在list2
上不存在的对象。
result2
列表应包含在list2
上存在而在list1
上不存在的对象。
resultEdit
应该包含list1
和list2
中都存在的对象,但val_1
、val_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万个项目),处理时间不好!
那么,有什么好的、快速的方法可以实现这一点吗?
注意:处理时间对我和内存都很重要。
好吧,描述中缺少了很多东西,但在比较之前,我会对数据进行一些预处理:
- 为每个元素添加排序功能。因此,我将{"A",1,2,3,4}转移到<string,int>,其中string是名称("A"),int是数字1234(取决于n的值。如果太长,只需使用字符串)
- 现在,您可以在适当的数据结构中对元素进行排序(<"a",1234>位于<"a",1235>之前)。我会用一本字典,每个键都有一个排序列表
- 现在更容易找到不同的结果。例如,对于<"A",1234">在列表1中,只需检查它是否存在于列表2中的键"A"下。这种搜索现在应该会快得多