C#中字符串数组(作为输入)的幂集

时间:2016-03-22 04:53:33

标签: c# powerset

我想创建一个幂集函数,它接受string []作为输入,并提供输出,如 EDIT1 下的底部所示。

我遇到了这个

private static List<string> PowerSet(string[] input)
{
    int n = input.Length;
    // Power set contains 2^N subsets.
    int powerSetCount = 1 << n;
    var ans = new List<string>();

    for (int setMask = 0; setMask < powerSetCount; setMask++)
    {
        var s = new StringBuilder();
        for (int i = 0; i < n; i++)
        {
            // Checking whether i'th element of input collection should go to the current subset.
            if ((setMask & (1 << i)) > 0)
            {
                s.Append(input[i]);
            }
        }
        ans.Add(s.ToString());
    }

    return ans;
}

我不能将此功能用作

EDIT1

上面的函数为我提供了一个集合的输出{&#39; a&#39;&#39; b&#39;}为

""
"a"
"b"
"ab"

我需要输出显示为

{}
{"a"}
{"b"}
{"a","b"}

1 个答案:

答案 0 :(得分:1)

您可以使用param关键字将一组字符串值作为参数发送。它们也可以充当字符串数组。这是一个示例实现。

static void Main(string[] args)
{
    var list = PowerSet("node1", "node2", "node3");
    foreach (var item in list)
    {
        Console.WriteLine(item);
    }
    Console.ReadLine();
}

private static List<string> PowerSet(params string[] input)
{
    if (input == null)
    {
        throw new ArgumentNullException("input");
    }

    // Power set contains 2^N subsets.
    var powerSetCount = 1 << input.Length;

    var returnValue = new List<string>();

    for (var setMask = 0; setMask < powerSetCount; setMask++)
    {
        var stringBuilder = new StringBuilder();
        for (var i = 0; i < input.Length; i++)
        {
            // Checking whether i'th element of input collection should go to the current subset.
            if ((setMask & (1 << i)) > 0)
                stringBuilder.Append(input[i]);
        }
        returnValue.Add(stringBuilder.ToString());
    }
    return returnValue;
}