从列表中收集2的所有可能组合

时间:2015-10-06 01:50:08

标签: c# .net

我有一个包含10个项目的列表。我试图输出到控制台的每个可能的配对2.但它不能与自己配对。例如 1,2 1,3 1,4等......

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

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

2 个答案:

答案 0 :(得分:1)

因此,如果您有1到10的列表,则需要1,2 1,3 1,4 ... 1,10 - 2,1 2,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]);
            }
        }
    }
}

答案 1 :(得分:0)

这是一个很容易的问题。添加@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;
    }