我想创建一个幂集函数,它接受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"}
答案 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;
}