Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较复杂对象列表并删除常用条目_C#_.net_List_.net Core_Aggregate - Fatal编程技术网

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);
}
我们需要的是:

  • 例如,我们有产品列表,其中一些产品具有“类型”公共:
比如:

我们所期望的逻辑结果是它应该返回:

Module2(ModuleObject,在列表中:Configurations.C)

这在两个列表中都很常见

我们尝试使用的骨料如下所示:

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-当然,更新了问题