如何以两个为一组查找List的所有组合?

时间:2015-08-30 20:06:39

标签: c# list combinations

我已经尝试过了,而且我找不到我想要完成的事情。

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

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
  6. 这些被认为是独一无二的。是否可以说1,22,1相同?

3 个答案:

答案 0 :(得分:1)

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))
      }
   }
}

答案 1 :(得分:1)

我假设您的源列表名为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));

答案 2 :(得分:0)

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

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'
    }
}