我正在尝试编写一个函数,该函数将返回给定字符串列表的指定长度的所有可能唯一集。
我目前的代码:
private void button1_Click(object sender, EventArgs e)
{
string alpha = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
List<string> input = alpha.Split(new char[] {','}).ToList();
StringBuilder sb = new StringBuilder();
foreach(HashSet<string> set in GetCombinations(input, 16))
{
foreach (string item in set)
{
sb.Append(item).Append(',');
}
sb.Length = sb.Length - 1;
sb.AppendLine();
}
textBox1.Text = sb.ToString();
}
private IEnumerable<HashSet<string>> GetCombinations(List<string> input, int count)
{
}
在这种情况下,我需要离开......
ABCDEFGHIJKLMNOP
ABCDEFGHIJKLMNOQ
ABCDEFGHIJKLMNOR
ABCDEFGHIJKLMNOS
...等。返回的每一套必须有16个项目。
我有点难过如何做到这一点。我考虑了很多选择,但我找不到任何不笨重的东西。
答案 0 :(得分:0)
这样做:
private static void GetCombination(ref List<string[]> list, string[] t, int n, int m, int[] b, int M)
{
for (int i = n; i >= m; i--)
{
b[m - 1] = i - 1;
if (m > 1)
{
GetCombination(ref list, t, i - 1, m - 1, b, M);
}
else
{
if (list == null)
{
list = new List<string[]>();
}
string[] temp = new string[M];
for (int j = 0; j < b.Length; j++)
{
temp[j] = t[b[j]] + " ";
}
list.Add(temp);
}
}
}
public static List<string[]> GetCombination(string[] t, int n)
{
if (t.Length < n)
{
return null;
}
int[] temp = new int[n];
List<string[]> list = new List<string[]>();
GetCombination(ref list, t, t.Length, n, temp, n);
return list;
}
使用方法:
List<string[]> output = new List<string[]>();
string alpha = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
string[] input = alpha.Split(',').ToArray();
output = GetCombination(input, 16);
您将收到5311735组合,因此您可能会遇到“OutOfMemoryException”。 如果你真的需要处理这么多数据,我建议使用数据库。