c#组合过滤器

本文关键字:过滤器 组合 | 更新日期: 2023-09-27 18:17:40

我有以下代码生成一组数字的所有可能组合。

输入图片描述

此代码生成如下组合{1 2 3 4 5 6},{1 2 3 4 5 7},{1 2 3 4 5 8}.....等

但是我需要应用一些特殊的过滤器。

例如,在任何组合中,第一个数字应该是"偶数",第二个数字应该是"奇数"等。

我想对组合中的所有6个数字应用过滤器。有人能帮忙吗?谢谢。


c#组合过滤器

我想你没有机会接触到《组合学》的源代码。组合方法。所以你只能在foreach

中设置过滤器

类似:

foreach (int[] combination in Combinatorics.Combinations(values, 6))
{
    // first filter
    if (combinations[0] % 2 == 0) // first digit should be even
    {
        // only now should the check be continued (second filter)
        if (combinations[1] % 2 != 0) // ... odd
        {
            // and so on...
            if (combinations[2] == someFilter)
            {
                // you should nest the "ifs" until "combinations[5]" and only
                // in the most inner "if" should the number be shown:
                string combination = string.format("{{0} {1} {2} {3} {4} {5}}", combinations[0], combinations[1], combinations[2], combinations[3], combinations[4], combinations[5]);
                Console.WriteLine(combination);
            }
        }
    }
}

您可以使用Where筛选结果

Combinatorics.Combinations(values, 6).Where(c => c.First() % 2 == 0 /* && ..other conditions */)