如何在两个集合中找到List的所有组合

本文关键字:List 组合 集合 两个 | 更新日期: 2023-09-27 18:10:30

我已经试过了,但我没有找到很多我想要完成的事情。

假设我有一个大约有50个数字的List<int>

List<int> _myList = new List<int>();
for (int i = 0; i < 49; i++)
{
    _myList.Add(i);
}

如何获得一个基于两个数组的组合列表?

例如

我的结果集看起来像

  1. 1,1
  2. 1,2
  3. 1,3
  4. 1,4
  5. 1,5

被认为是唯一的。是否可以说1,22,1相同?

如何在两个集合中找到List的所有组合

我假设您的源列表名为input:

var output = new List<HashSet<int>>();
for (int i = 0; i < input.Count; i++)
    for (int j = i + 1; j < input.Count; j++)
        output.Add(new HashSet<int> { input[i], input[j] });

如果您想实际输出结果到控制台:

foreach (var result in output)
    Console.WriteLine(string.Join(", ", result));
var sets;
for (int i = 0; i < 49; i++)
{
   for (int j = 1; j < 49; j++)
   {
      if(setc.Contains(new Pair(_myList(i), _myList(j))==false)
      {
         sets.Add(new Pair(_myList(i), _myList(j))
      }
   }
}

如果你只是需要总组合,那么有一个公式

totalCombination = n!/(k! * (n-k)!)

如果 n = 50 k = 2 ,

可以解析为50!/2!*48!

但是要通过编程解决

for(int i=0;i<49;i++)
{
    for(int j=i+1;j<=49;j++)
    {
        //Collect all the combinations in the form of 'i, j'
    }
}