2015-10-06 54 views
-8

我有一个包含10个项目的列表。我试图输出控制每个可能的配对2.但它不能与自身配对。例如 1,2 1,3 1,4等...从列表中收集2的所有可能组合

我发现这个查找列表中的所有可能的组合。有人可以帮我修改吗?

private static void GetCombination(IList list) 
    { 
     var count = Math.Pow(2, list.Count); 
     for (var i = 1; i <= count - 1; i++) 
     { 
      var str = Convert.ToString(i, 2).PadLeft(list.Count, '0'); 
      for (var j = 0; j < str.Length; j++) 
      { 
       if (str[j] == '1') 
       { 
        Console.Write(list[j]); 
       } 
      } 
      Console.WriteLine(); 
     } 
    } 
+0

使用谷歌的样子是多么容易找到解决办法来吧.. [C#冒泡排序(http://www.c-sharpcorner.com/UploadFile/3d39b4/bubble-sort-in- C-Sharp /) – MethodMan

+0

我从来没有说过我不知道我发布的代码是干什么的。发布的代码是从列表对象中获取所有组合。我试图得到所有组合配对的X数量,即配对2,所以输出将是.... 1,2 1,3,1,10 – Andy

+0

您的代码最初会给'var count = Math.Pow (2,list.Count);'计数值为'1024.0',与无需重复值应该完成的任何操作无关。'FirstOne'给了你一个起点,需要添加1或2个希望你可以快速找出需要添加什么 – MethodMan

回答

1

所以,如果你有1到10的列表,你需要1,21,31,4 ... 1,10 - 2,12,3 ... 2,10等。 你只需使用气泡并检查第一个索引是否与第二个索引不同。

更多的澄清,这里有一个例子:

List<int> mylist = new List<int>(new int[] { 1,2,3,4,5,6,7,8,9 }); 
GetCombination(mylist); 


private static void GetCombination(IList<int> values) 
{ 
    for (int i = 0; i < values.Count; i++) 
    { 
     for (int j = 0; j < values.Count; j++) 
     { 
      if (i != j) 
      { 
       Console.WriteLine(values[i] + " " + values[j]); 
      } 
     } 
    } 
} 
+0

这是正确的 – Andy

+1

@Andy如果你觉得你被困在某些东西,尝试将问题分成几步,甚至一步一步。你可以调试,如果你愿意的话。另一个技巧是弄清楚你必须做什么,而不管程序设计语言,只有代码。无论如何。如果这是您正在寻找的答案,请不要忘记接受它并投票。 – FirstOne

0

这是这样一个简单的question.Adding到@FirstOne 的回答,您还可以返回一个包含从该函数的所有组合的清单: List mylist = new List(new int [] {1,2,3,4,5,6,7,8,9}); GetCombination(mylist);

public static IList<Tuple<int,int>> GetCombination(IList<int> values) 
    { 
     List<Tuple<int,int>> _temp=new List<Tuple<int, int>>(); 
     for (int i = 0; i < values.Count; i++) 
     { 
      for (int j = 0; j < values.Count; j++) 
      { 
       if (i != j) 
       { 
        _temp.Add(Tuple.Create(i, j)); 
       } 
      } 
     } 
     return _temp; 
    }