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

C# C中字符串数组的幂集(作为输入)#,c#,powerset,C#,Powerset,我想创建一个幂集函数,它接受字符串[]作为输入,并给出输出,如底部的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>(

我想创建一个幂集函数,它接受字符串[]作为输入,并给出输出,如底部的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;
}
我需要输出显示为

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

可以使用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;
}
static void Main(字符串[]args)
{
var列表=功率集(“节点1”、“节点2”、“节点3”);
foreach(列表中的变量项)
{
控制台写入线(项目);
}
Console.ReadLine();
}
专用静态列表电源集(参数字符串[]输入)
{
如果(输入==null)
{
抛出新的ArgumentNullException(“输入”);
}
//幂集包含2^N个子集。

var powerSetCount=1您的意思是“参数字符串[]参数”作为参数?然后您可以使用1,2,3,…n个输入参数。对于每个参数,您可以使用您当前的实现。我已经编辑了我的问题。您真的只是想问如何将项目添加到列表中吗?如果输入集中的元素数增加,将很难读取输出。因为元素相邻,没有任何空间。
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;
}