Мой реальный вариант использования более сложный и включает в себя класс, а не строку, но если я смогу решить упрощенный пример, я смогу использовать его обратно. Однако я не могу использовать решение, которое основано на идентификации букв или чего-то подобного.
private void Example()
{
var permutations = new List<List<int>>
{
new List<int> { 0, 1, 2 }, // AB + C + D, ABC + D, ABCD
new List<int> { 0, 2, 1 }, // AB + C + D, AB + CD, ABCD
new List<int> { 1, 0, 2 }, // A + BC + D, ABC + D, ABCD
new List<int> { 1, 2, 0 }, // A + BC + D, A + BCD, ABCD
new List<int> { 2, 0, 1 }, // A + B + CD, AB + CD, ABCD
new List<int> { 2, 1, 0 } // A + B + CD, A + BCD, ABCD
};
foreach (var permutation in permutations)
{
var variables = new List<string> { "A", "B", "C", "D" };
int count = 0;
foreach (var i in permutation)
{
variables[i - count] = variables[i - count] + variables[i - count + 1];
variables.RemoveAt(i - count + 1);
count++;
}
Console.WriteLine(variables.Single());
}
}
Как показано, я пытаюсь объединить элементы в списке в предопределенном порядке, предоставленном permutations
. Приведенный пример работает для первой перестановки, но не для второй, так как индекс становится отрицательным.
Я сделал несколько снимков в темноте, и хотя сам по себе знаю, какую операцию необходимо выполнить, я не могу обернуть моя голова вокруг, как программировать это.
// Fails on { 1, 0, 2}
if (i - count == 0)
count++;
// Fails on { 1, 0, 2}
if (i - count + 1 < variables.Count)
count++;