首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >3组多值组合算法

3组多值组合算法
EN

Stack Overflow用户
提问于 2013-07-17 06:49:29
回答 1查看 455关注 0票数 2

我需要创建一个过程,它将允许我为三个或更多组唯一地获取三个重复值的完整组合集​​。

例如,我可以有3个组(R1 - R2 - R3)和3个值​​(A - AB - B),我必须将所有可能的组合分为3组。

如下所示:

代码语言:javascript
运行
复制
Groups    1°   2°   3°   4°   5°   .......

R1        A -  A -  AB - AB - AB   ...
R2        A -  A -  A  - A  - BB   ...
R3        A -  AB - A  - A  - A    ...

我必须确保所有可能的序列都存在并且永远不会重复。

不幸的是,我是编程领域的新手,对组合学一无所知。我不知道该怎么处理……

如果我说得不清楚,我很抱歉,并提前感谢任何能给我一些帮助的人。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-17 07:26:31

我认为你想要你的价值观的所有组合……

以下是在C#中执行此操作的一般方法...

代码语言:javascript
运行
复制
static IEnumerable<IEnumerable<T>> Combinations<T>(IEnumerable<T> list, int length)
{
    if (length == 1) return list.Select(t => new T[] { t });

    return Combinations(list, length - 1)
        .SelectMany(t => list, (t1, t2) => t1.Concat(new T[] { t2 }));
}

你就这样叫它...

代码语言:javascript
运行
复制
    var groups = new List<string>() { "R1", "R2", "R3" };
    var values = new List<string>() { "AA", "AB", "BB" };
    var combinations = Combinations(values, groups.Count);
    var i = 0;
    var stringFormat =  string.Join(", ", groups.Select(x => x +"={"+ i++ +"}"));
    // stringFormat looks like "R1={0}, R2={1}, R3={2}"
    foreach (var value in combinations)
    {
        var arrayOfValues = value.ToArray();  // each value is a list of the combinations.
        Console.WriteLine(string.Format(stringFormat, arrayOfValues));
    }

你提到了你的经验不足,所以我已经包括了硬编码的方式,这更容易遵循…

代码语言:javascript
运行
复制
    var values = new List<string>() { "AA", "AB", "BB" };
    foreach (var value1 in values)
    {
        foreach (var value2 in values)
        {
            foreach (var value3 in values)
            {
                Console.WriteLine(string.Format("R1 = {0}, R2 = {1}, R3 = {2}", value1, value2, value3));
            }
        }
    }

输出如下所示...

代码语言:javascript
运行
复制
R1=AA, R2=AA, R3=AA
R1=AA, R2=AA, R3=AB
R1=AA, R2=AA, R3=BB
R1=AA, R2=AB, R3=AA
R1=AA, R2=AB, R3=AB
R1=AA, R2=AB, R3=BB
R1=AA, R2=BB, R3=AA
R1=AA, R2=BB, R3=AB
R1=AA, R2=BB, R3=BB
R1=AB, R2=AA, R3=AA
R1=AB, R2=AA, R3=AB
R1=AB, R2=AA, R3=BB
R1=AB, R2=AB, R3=AA
R1=AB, R2=AB, R3=AB
R1=AB, R2=AB, R3=BB
R1=AB, R2=BB, R3=AA
R1=AB, R2=BB, R3=AB
R1=AB, R2=BB, R3=BB
R1=BB, R2=AA, R3=AA
R1=BB, R2=AA, R3=AB
R1=BB, R2=AA, R3=BB
R1=BB, R2=AB, R3=AA
R1=BB, R2=AB, R3=AB
R1=BB, R2=AB, R3=BB
R1=BB, R2=BB, R3=AA
R1=BB, R2=BB, R3=AB
R1=BB, R2=BB, R3=BB
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17688281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档