C#-在整数列表中查找公共元素

C#-在整数列表中查找公共元素,c#,list,C#,List,我有一个项目列表,如下所示 List<List<int>> testItems=new List<List<int>>(); int count; foreach (List<int> a in testItems) { count = 0; foreach (int b in a) { foreach (List<int> c in testItems) {

我有一个项目列表,如下所示

List<List<int>> testItems=new List<List<int>>();
int count;
foreach (List<int> a in testItems)
{
    count = 0;
    foreach (int b in a)
    {
        foreach (List<int> c in testItems)
        {
            foreach (int d in c)
            {
                if (d == b)
                {
                    count++;
                    break;
                }
            }
        }
        if (count == a.Count)
            finalList.Add(b);
    }
}
List testItems=new List();
我已经像这样添加了一些项目

List<int> item=new List<item>();
item.clear();

item.Add(3);
item.Add(5);
item.Add(7);

testItems.Add(item);

item.clear();
item.Add(10);
item.Add(3);

testItems.Add(item);

item.clear();
item.Add(1);
item.Add(8);
item.Add(3);
item.Add(9);

testItems.Add(item);
列表项=新列表();
item.clear();
增加第(3)项;
增加第(5)项;
增加(7)项;
测试项目。添加(项目);
item.clear();
增加(10)项;
增加第(3)项;
测试项目。添加(项目);
item.clear();
增加第(1)项;
增加(8)项;
增加第(3)项;
增加(9)项;
测试项目。添加(项目);
现在我要做的是提取所有列表的公共元素,并将其添加到另一个名为finalList的列表中

List<int> finalList = new List<int>();
List finalList=new List();
我试过以下方法

List<List<int>> testItems=new List<List<int>>();
int count;
foreach (List<int> a in testItems)
{
    count = 0;
    foreach (int b in a)
    {
        foreach (List<int> c in testItems)
        {
            foreach (int d in c)
            {
                if (d == b)
                {
                    count++;
                    break;
                }
            }
        }
        if (count == a.Count)
            finalList.Add(b);
    }
}
int计数;
foreach(测试项目中的列表a)
{
计数=0;
foreach(a中的int b)
{
foreach(测试项目中的列表c)
{
foreach(int d in c)
{
如果(d==b)
{
计数++;
打破
}
}
}
if(count==a.count)
最后添加(b);
}
}
我知道这个解决方案不是最优的,不能提供我所需要的。它可能会多次添加同一项。有人能帮我修一下吗

您可以使用LINQ方法

你会得到这样的结果:

IEnumerable<int> result = testItems[0];
for(int i = 1; i < testItems.Count; i++)
{
    result = result.Intersect(testItems[i]);
}
IEnumerable result=testItems[0];
for(int i=1;i
在结果变量中获得交点

但是你真的确定你需要这个奇怪的列表吗?

你可以使用LINQ方法

你会得到这样的结果:

IEnumerable<int> result = testItems[0];
for(int i = 1; i < testItems.Count; i++)
{
    result = result.Intersect(testItems[i]);
}
IEnumerable result=testItems[0];
for(int i=1;i
在结果变量中获得交点

但是你真的确定你需要这个奇怪的列表吗?

你可以使用LINQ方法

你会得到这样的结果:

IEnumerable<int> result = testItems[0];
for(int i = 1; i < testItems.Count; i++)
{
    result = result.Intersect(testItems[i]);
}
IEnumerable result=testItems[0];
for(int i=1;i
在结果变量中获得交点

但是你真的确定你需要这个奇怪的列表吗?

你可以使用LINQ方法

你会得到这样的结果:

IEnumerable<int> result = testItems[0];
for(int i = 1; i < testItems.Count; i++)
{
    result = result.Intersect(testItems[i]);
}
IEnumerable result=testItems[0];
for(int i=1;i
在结果变量中获得交点


但是你真的确定你需要这个奇怪的列表吗?

你添加项目的代码不是添加三个不同的项目。当您重新使用该项时,代码相当于:

  List<int> item=new List<int>();
  item.Add(1);
  item.Add(8);
  item.Add(3);
  item.Add(9);

  testItems.Add(item);
  testItems.Add(item);
  testItems.Add(item);
列表项=新列表();
增加第(1)项;
增加(8)项;
增加第(3)项;
增加(9)项;
测试项目。添加(项目);
测试项目。添加(项目);
测试项目。添加(项目);
您需要创建新项目,而不是重复使用同一项目:

  List<int> item = new List<int>();
  item.Add(3);
  item.Add(5);
  item.Add(7);
  testItems.Add(item);

  item = new List<int>();
  item.Add(10);
  item.Add(3);
  testItems.Add(item);

  item = new List<int>();
  item.Add(1);
  item.Add(8);
  item.Add(3);
  item.Add(9);
  testItems.Add(item);
列表项=新列表();
增加第(3)项;
增加第(5)项;
增加(7)项;
测试项目。添加(项目);
item=新列表();
增加(10)项;
增加第(3)项;
测试项目。添加(项目);
item=新列表();
增加第(1)项;
增加(8)项;
增加第(3)项;
增加(9)项;
测试项目。添加(项目);
为了更有效地获取所有项目共有的数字,可以循环第一个项目中的所有值,并检查所有其他项目中存在的值:

List<int> finalList =
  testItems[0].Where(
    i => testItems.Skip(1).All(x => x.Contains(i))
  ).ToList();
List finalList=
测试项[0]。其中(
i=>testItems.Skip(1).All(x=>x.Contains(i))
).ToList();

添加项目的代码不是添加三个不同的项目。当您重新使用该项时,代码相当于:

  List<int> item=new List<int>();
  item.Add(1);
  item.Add(8);
  item.Add(3);
  item.Add(9);

  testItems.Add(item);
  testItems.Add(item);
  testItems.Add(item);
列表项=新列表();
增加第(1)项;
增加(8)项;
增加第(3)项;
增加(9)项;
测试项目。添加(项目);
测试项目。添加(项目);
测试项目。添加(项目);
您需要创建新项目,而不是重复使用同一项目:

  List<int> item = new List<int>();
  item.Add(3);
  item.Add(5);
  item.Add(7);
  testItems.Add(item);

  item = new List<int>();
  item.Add(10);
  item.Add(3);
  testItems.Add(item);

  item = new List<int>();
  item.Add(1);
  item.Add(8);
  item.Add(3);
  item.Add(9);
  testItems.Add(item);
列表项=新列表();
增加第(3)项;
增加第(5)项;
增加(7)项;
测试项目。添加(项目);
item=新列表();
增加(10)项;
增加第(3)项;
测试项目。添加(项目);
item=新列表();
增加第(1)项;
增加(8)项;
增加第(3)项;
增加(9)项;
测试项目。添加(项目);
为了更有效地获取所有项目共有的数字,可以循环第一个项目中的所有值,并检查所有其他项目中存在的值:

List<int> finalList =
  testItems[0].Where(
    i => testItems.Skip(1).All(x => x.Contains(i))
  ).ToList();
List finalList=
测试项[0]。其中(
i=>testItems.Skip(1).All(x=>x.Contains(i))
).ToList();

添加项目的代码不是添加三个不同的项目。当您重新使用该项时,代码相当于:

  List<int> item=new List<int>();
  item.Add(1);
  item.Add(8);
  item.Add(3);
  item.Add(9);

  testItems.Add(item);
  testItems.Add(item);
  testItems.Add(item);
列表项=新列表();
增加第(1)项;
增加(8)项;
增加第(3)项;
增加(9)项;
测试项目。添加(项目);
测试项目。添加(项目);
测试项目。添加(项目);
您需要创建新项目,而不是重复使用同一项目:

  List<int> item = new List<int>();
  item.Add(3);
  item.Add(5);
  item.Add(7);
  testItems.Add(item);

  item = new List<int>();
  item.Add(10);
  item.Add(3);
  testItems.Add(item);

  item = new List<int>();
  item.Add(1);
  item.Add(8);
  item.Add(3);
  item.Add(9);
  testItems.Add(item);
列表项=新列表();
增加第(3)项;
增加第(5)项;
增加(7)项;
测试项目。添加(项目);
item=新列表();
增加(10)项;
增加第(3)项;
测试项目。添加(项目);
item=新列表();
增加第(1)项;
增加(8)项;
增加第(3)项;
增加(9)项;
测试项目。添加(项目);
为了更有效地获取所有项目共有的数字,可以循环第一个项目中的所有值,并检查所有其他项目中存在的值:

List<int> finalList =
  testItems[0].Where(
    i => testItems.Skip(1).All(x => x.Contains(i))
  ).ToList();
List finalList=
测试项[0]。其中(
i=>testItems.Skip(1).All(x=>x.Contains(i))
).ToList();

添加项目的代码不是添加三个不同的项目。当您重新使用该项时,代码相当于:

  List<int> item=new List<int>();
  item.Add(1);
  item.Add(8);
  item.Add(3);
  item.Add(9);

  testItems.Add(item);
  testItems.Add(item);
  testItems.Add(item);
列表项=新列表();
增加第(1)项;
增加(8)项;
增加第(3)项;
增加(9)项;
测试项目。添加(项目);
测试项目。添加(项目);
测试项目。添加(项目);
您需要创建新项目,而不是重复使用同一项目:

  List<int> item = new List<int>();
  item.Add(3);
  item.Add(5);
  item.Add(7);
  testItems.Add(item);

  item = new List<int>();
  item.Add(10);
  item.Add(3);
  testItems.Add(item);

  item = new List<int>();
  item.Add(1);
  item.Add(8);
  item.Add(3);
  item.Add(9);
  testItems.Add(item);
列表项=新列表();
增加第(3)项;
增加第(5)项;
增加(7)项;
T