Аналог product из python itertools в С#

Рейтинг: 2Ответов: 1Опубликовано: 09.05.2023

Мой код перебирает все возможные комбинации символов ABC в словах длиной в 5 символов и выводит их количество. Как записать этот код на C#?

from itertools import product
combinations = product("ABC", repeat=5)
count = 0
for i in combinations:
    count += 1
print(count)

Ответы

▲ 1Принят

Прямое произведение (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

Подробный разбор решения я публиковал ранее здесь.