C# 比较复杂对象列表并删除常用条目
我们有一个如下所示的对象列表:C# 比较复杂对象列表并删除常用条目,c#,.net,list,.net-core,aggregate,C#,.net,List,.net Core,Aggregate,我们有一个如下所示的对象列表: public Product Product{ get; } public Dictionary<Modules, IReadOnlyCollection<ModuleConfiguration>> Configurations { get; } .... public Type Type { get; } ... var result2 = list.Aggregate((product1, product2) =>
public Product Product{ get; }
public Dictionary<Modules, IReadOnlyCollection<ModuleConfiguration>> Configurations { get; }
....
public Type Type { get; }
...
var result2 = list.Aggregate((product1, product2) =>
GetCommonModules(product1, product2).
ToDictionary(
module => module,
module => GetCommonTypes(product1, product2, module)));
Console.WriteLine();
static IEnumerable<int> GetCommonModules(Dictionary<int, List<string>> product1, Dictionary<int, List<string>> product2)
{
return product1.Keys.Intersect(product2.Keys);
}
static List<string> GetCommonTypes(Dictionary<int, List<string>> product1, Dictionary<int, List<string>> product2, int module)
{
return product1[module].Intersect(product2[module], new TypeEqualityComparer()).ToList();
}
internal sealed class TypeEqualityComparer : IEqualityComparer<ModuleConfiguration>
{
public bool Equals(ModuleConfiguration x, ModuleConfiguration y) => x.Type.Equals(y.Type);
}
我们需要的是:
- 例如,我们有产品列表,其中一些产品具有“类型”公共:
public Product Product{ get; }
public Dictionary<Modules, IReadOnlyCollection<ModuleConfiguration>> Configurations { get; }
....
public Type Type { get; }
...
var result2 = list.Aggregate((product1, product2) =>
GetCommonModules(product1, product2).
ToDictionary(
module => module,
module => GetCommonTypes(product1, product2, module)));
Console.WriteLine();
static IEnumerable<int> GetCommonModules(Dictionary<int, List<string>> product1, Dictionary<int, List<string>> product2)
{
return product1.Keys.Intersect(product2.Keys);
}
static List<string> GetCommonTypes(Dictionary<int, List<string>> product1, Dictionary<int, List<string>> product2, int module)
{
return product1[module].Intersect(product2[module], new TypeEqualityComparer()).ToList();
}
internal sealed class TypeEqualityComparer : IEqualityComparer<ModuleConfiguration>
{
public bool Equals(ModuleConfiguration x, ModuleConfiguration y) => x.Type.Equals(y.Type);
}
var result2=list.Aggregate((产品1,产品2)=>
GetCommonModule(产品1、产品2)。
托迪科(
模块=>模块,
module=>GetCommonTypes(product1、product2、module));
Console.WriteLine();
静态IEnumerable GetCommonModule(字典产品1、字典产品2)
{
返回product1.Keys.Intersect(product2.Keys);
}
静态列表GetCommonTypes(字典产品1、字典产品2、int模块)
{
返回product1[module].Intersect(product2[module],新类型EqualityComparer()).ToList();
}
内部密封类类型EqualityComparer:IEqualityComparer
{
公共布尔等于(模块配置x,模块配置y)=>x.Type.Equals(y.Type);
}
注意:对于测试,我们添加了int而不是Module对象
上面的逻辑没有返回我们想要的结果,我想知道是否有人有更好的解决方案,或者可以做些什么来实现这一点?也许你也需要展示你的
平等比较者的代码?@SalahAkbari-当然,更新了问题