如何获得字符串数组的组合和变体? 让我们说A,B,C,D 期望得到这样的东西,它能够计算出甚至AB和BA视图作为不同的组合。
A
AB
AC
ABC
ABCD
ACBD
...
B
BA
BC
BCD
BADC
...
修改
目前我尝试的是下面的代码,使用List,我想我是否应该为我的字符串设置另一个排列(如set= abcd,bcda,cdab.....
)以获得完整列表?
string set = "abcd";
// Init list
List<string> subsets = new List<string>();
// Loop over individual elements
for (int i = 1; i < set.Length; i++)
{
subsets.Add(set[i - 1].ToString());
List<string> newSubsets = new List<string>();
// Loop over existing subsets
for (int j = 0; j < subsets.Count; j++)
{
string newSubset = subsets[j] + set[i];
newSubsets.Add(newSubset);
}
subsets.AddRange(newSubsets);
}
// Add in the last element
subsets.Add(set[set.Length - 1].ToString());
subsets.Sort();
答案 0 :(得分:0)
由于我发现很难理解你的问题,我为有限的回答道歉。不过我会试一试。我试图在C中创建一个程序,它将显示一个类似于字符串的字符数组的组合,只是没有&#39; \ 0&#39;。我将尝试将我的代码转换为C#。
/* String for combos to be enumerated */
char[] set = { 'a', 'b', 'c', 'd' };
/* Length of the array */
int setLength = set.Length, a, b, c;
/* This will print all combos that have 1 value. E.g. A, B, C, D */
for (a = 0; a < setLength; a++)
{
Console.WriteLine(set[a] + Environment.NewLine);
}
/* This will give the 1st value of the combo */
for (a = 0; a < setLength; a++)
{
/* This will give the 2nd value. Resulting in combos with a length of 2 */
for (b = 0; b < setLength; b++)
{
Console.WriteLine(set[a] + set[b] + Environment.NewLine);
}
}
/* 1st value */
for (a = 0; a < setLength; a++)
{
/* 2nd value */
for (b = 0; b < setLength; b++)
{
/* 3rd value */
for (c = 0; c < setLength; c++)
{
Console.WriteLine(set[a] + set[b] + set[c] + Environment.NewLine);
}
}
}
/* To continue with longer combos simply add more and more for loops */
输出会有所不同,因为我将其更改为适合单个屏幕截图 我希望这会有所帮助。
编辑:我发现了一个类似的问题已经回答:Listing permutations of different combination of characters请仔细阅读,因为它涵盖了这个问题中非常相似的主题。