Аналог product из python itertools в С#
Мой код перебирает все возможные комбинации символов ABC в словах длиной в 5 символов и выводит их количество. Как записать этот код на C#?
from itertools import product
combinations = product("ABC", repeat=5)
count = 0
for i in combinations:
count += 1
print(count)
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Прямое произведение (Cartesian Product) можно вычислить так
public static IEnumerable<T[]> MyProduct<T>(T[][] items)
{
int length = items.Length;
int[] indexes = new int[length];
while (true)
{
T[] arr = new T[length];
for (int i = 0; i < length; i++)
{
arr[i] = items[i][indexes[i]];
}
yield return arr;
int row = length - 1;
indexes[row]++;
while (indexes[row] == items[row].Length)
{
if (row == 0)
yield break;
indexes[row] = 0;
row--;
indexes[row]++;
}
}
}
А ваш код записать так
char[][] chars = Enumerable.Repeat("ABC".ToCharArray(), 5).ToArray();
Console.WriteLine(MyProduct(chars).Count());
Вывод в консоль
243
Подробный разбор решения я публиковал ранее здесь.