我有两个列表,其中仅包含从不同来源获得的重复项。
//Duplicate 1
var Duplicate1 = list1.GroupBy(d => new { d.Name, d.Value })
.Where(dup => dup.Count() > 1).SelectMany(dup => dup);
这将返回: {{red, red}, {red, red}, {green, green}, {green, green}}
//Duplicate 2
var Duplicate2 = list2.GroupBy(d => new { d.Name, d.Value })
.Where(dup => dup.Count() > 1).SelectMany(dup => dup);
这将返回: {{red, red}, {red, red}, {green, green}, {green, green}, {green, green}}
我如何使用linq对这些列表进行排序,以便我所能得到的是与众不同{green, green}
?
创建两个查找,然后加入这些查找,检查哪个查找对具有最多的项,然后获取等于差值的多个项:
var al = Duplicate1.ToLookup(x => x);
var bl = Duplicate2.ToLookup(x => x);
var result = al.Join(bl, agrp => agrp.Key,
bgrp => bgrp.Key,
(agrp, bgrp) => agrp.Count() > bgrp.Count() ?
agrp.Take(agrp.Count() - bgrp.Count()) :
bgrp.Take(bgrp.Count() - agrp.Count()))
.SelectMany(x => x);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句