C# C中字符串数组的幂集(作为输入)#
我想创建一个幂集函数,它接受字符串[]作为输入,并给出输出,如底部的EDIT1所示 我遇到了这个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>(
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;
}