Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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#_Linq - Fatal编程技术网

C# 如何找到集合之间的交集

C# 如何找到集合之间的交集,c#,linq,C#,Linq,假设我们有一个容器列表,每个容器都是一个对象。 每个容器中都有一些对象 我们如何找到在两个或多个容器中共享的所有重复对象 每个容器都有一个ID、名称和对象列表作为属性。 每个对象都有一个ID和名称 请看图片: 结果应该是: ------------- Object1.Name Object2.Name Object3.Name ------------- 我使用了一些不正确的代码 public class Container { public st

假设我们有一个容器列表,每个容器都是一个对象。 每个容器中都有一些对象

我们如何找到在两个或多个容器中共享的所有重复对象

每个容器都有一个ID、名称和对象列表作为属性。 每个对象都有一个ID和名称

请看图片:

结果应该是:

-------------
Object1.Name    
Object2.Name    
Object3.Name
-------------
我使用了一些不正确的代码

  public class Container
    {
        public string ID;
        public string Name;
        public string Top, Left, Right, Bottom;
        public List<ObjectX> Objects = new List<ObjectX>();

    }



public class ObjectX
    {
        public string ID;
        public string Name;
        public string Top, Left, Right, Bottom;

    }


 List<Container> AllBoundaries = new List<Container>();
            List<ObjectX> all_components = new List<ObjectX>();
            Container b1 = new Container();
            b1.Name = "Boundary1";
            b1.ID = "1";
            AllBoundaries.Add(b1);

            Container b2 = new Container();
            b2.Name = "Boundary2";
            b2.ID = "2";
            AllBoundaries.Add(b2);

            Container b3 = new Container();
            b3.Name = "Boundary3";
            b3.ID = "3";
            AllBoundaries.Add(b3);
//----------------------------------------------------------------------------------------
            ObjectX c1 = new ObjectX();
            c1.ID = "1";
            c1.Name = "c1";
            b1.Objects.Add(c1);

            ObjectX c2 = new ObjectX();
            c2.ID = "2";
            c2.Name = "c2";
            b1.Objects.Add(c2);

            ObjectX c3 = new ObjectX();
            c3.ID = "3";
            c3.Name = "c3";
            b1.Objects.Add(c3);

            ObjectX c22 = new ObjectX();
            c22.ID = "2";
            c2.Name = "c2";
            b2.Objects.Add(c2);

            foreach (Container   bx1 in  AllBoundaries )
            {

                foreach (Container bx2 in AllBoundaries)
                {
                    for (int i = 1; i < bx2.Objects.Count; i++)

                        if (bx1.ID != bx2.ID)
                        {
                            List<ObjectX> query = bx1.Objects.FindAll(bx => bx.Name == bx2.Objects[i].Name);
                            Console.WriteLine(bx2.Objects[i].Name + " Distributed");
                            bx2.Objects.Remove(bx2.Objects[i]);
                        }

                }
            }
公共类容器
{
公共字符串ID;
公共字符串名称;
公共字符串顶部、左侧、右侧、底部;
公共列表对象=新列表();
}
公共类ObjectX
{
公共字符串ID;
公共字符串名称;
公共字符串顶部、左侧、右侧、底部;
}
List allboundries=新列表();
列出所有组件=新列表();
容器b1=新容器();
b1.Name=“Boundary1”;
b1.ID=“1”;
所有边界。添加(b1);
容器b2=新容器();
b2.Name=“Boundary2”;
b2.ID=“2”;
所有边界。添加(b2);
容器b3=新容器();
b3.Name=“Boundary3”;
b3.ID=“3”;
所有边界。添加(b3);
//----------------------------------------------------------------------------------------
ObjectX c1=新的ObjectX();
c1.ID=“1”;
c1.Name=“c1”;
b1.对象。添加(c1);
ObjectX c2=新的ObjectX();
c2.ID=“2”;
c2.Name=“c2”;
b1.对象。添加(c2);
ObjectX c3=新的ObjectX();
c3.ID=“3”;
c3.Name=“c3”;
b1.对象。添加(c3);
ObjectX c22=新的ObjectX();
c22.ID=“2”;
c2.Name=“c2”;
b2.对象。添加(c2);
foreach(所有边界中的容器bx1)
{
foreach(所有边界中的容器bx2)
{
对于(int i=1;ibx.Name==bx2.Objects[i].Name);
Console.WriteLine(bx2.Objects[i].Name+“分布式”);
bx2.Objects.Remove(bx2.Objects[i]);
}
}
}

但这会给出从1到9的所有对象,这是不正确的。

假设您有一个容器集合,您可以执行以下操作:

var item = from c in containers
           from o in c.Objects
           group c.ContainerName by o into g
           where g.Distinct().Count() > 1
           select g.Key;

我认为问题很简单,可以创建一个。创建一个完整的自包含示例(同时显示预期的输出)如何,以便我们可以复制/粘贴并测试它。我不想创建一个可能不是您所期望的测试用例。我想知道Linq
Intersect
操作符是否适用you@LucMorin它很有效,如果您感兴趣,请查看最佳答案!