C# 比较列表中X个项目的数量和Y个项目的数量,并对它们进行限定

C# 比较列表中X个项目的数量和Y个项目的数量,并对它们进行限定,c#,algorithm,list,linq,data-structures,C#,Algorithm,List,Linq,Data Structures,假设我有3个小组,每个小组分为组,每组8个小组,我需要决定哪个小组在该组的位置 位置1上的team 1和位置1上的team 2的组合给出了0个故障, 但是team 1在position 1和team 2在position 2的组合给出了故障2 现在我需要根据球队的失误为他们找到最佳位置。如果只针对两个团队,那么这很容易。但如果是X队的话,情况就变得更难了。除此之外,还可以在组中设置已填充的职位,以便无法相互比较这些职位 为了简单起见,我只为4号和8号的组添加了一个小示例,但是有2到8号的组 对于

假设我有
3个小组
,每个小组分为
组,每组8个
小组,我需要决定哪个小组在该组的
位置

位置1上的
team 1
位置1上的
team 2
的组合给出了
0个故障
, 但是
team 1
position 1
team 2
position 2
的组合给出了
故障2

现在我需要根据球队的失误为他们找到最佳位置。如果只针对两个团队,那么这很容易。但如果是X队的话,情况就变得更难了。除此之外,还可以在组中设置已填充的职位,以便无法相互比较这些职位

为了简单起见,我只为4号和8号的组添加了一个小示例,但是有2到8号的组

对于所有这些GroupSize,我有+-模式,并且还计算了它们的错误

因此,对于下面的这个例子,我可以将所有团队放在第1位 但当其中一组中的位置1已经被占据时,情况就不同了

我需要找到故障最少的最佳选择

背景

这些组看起来像这样。。。其中null为空位置

故障计算的几种模式

8号组

4号组

故障计算

当on位置X==+和Y位置Y==-或反之亦然时,我们计算故障数
如果我们在某些位置找到+=+或-=-则无故障

foreach (var teamAvailableLineNumberA in teamAvailableLineNumbers) {
      foreach (var availableLineNumberA in teamAvailableLineNumberA.Value) {
        foreach (var teamAvailableLineNumberB in teamAvailableLineNumbers) {
          if (teamAvailableLineNumberA.Key == teamAvailableLineNumberB.Key) { continue; } //Dont process yourself
          foreach (var availableLineNumberB in teamAvailableLineNumberB.Value) {
            var teamA = teamAvailableLineNumberA.Key;
            var teamB = teamAvailableLineNumberB.Key;

            var pmSchema = APlusMinusSchemas.Single(pm => pm.DrawSize == teamA.Group.GroupSize);
            var complementartyLine =pmSchema.LineNumbers[availableLineNumberA].ComplementaryLines.Single(cl => cl.DrawSize == teamB.Group.GroupSize && cl.LineNumber == availableLineNumberB);

            if (complementartyLine != null) {
              listOfComplementaryLinesByTeamCombination.Add(new Tuple<Team, Team, int, int, int>(teamA,teamB,availableLineNumberA, availableLineNumberB, complementartyLine.NumberOfFaultsHomeHome));
            }
          }
        }
      }
    }
foreach(teamAvailableLineNumbers中的var teamAvailableLineNumberA){
foreach(teamAvailableLineNumberA.Value中的var availableLineNumberA){
foreach(teamAvailableLineNumbers中的var teamAvailableLineNumberB){
如果(teamAvailableLineNumberA.Key==teamAvailableLineNumberB.Key){continue;}//不要自己处理
foreach(TeamAvailableLineNumberberb.Value中的var AvailableLineNumberberb){
var teamA=teamAvailableLineNumberA.Key;
var teamB=teamAvailableLineNumberB.Key;
var pmSchema=aplusminschemas.Single(pm=>pm.DrawSize==teamA.Group.GroupSize);
var complementartyLine=pmSchema.LineNumbers[availableLineNumberA].ComplementaryLines.Single(cl=>cl.DrawSize==teamB.Group.GroupSize&&cl.LineNumber==availableLineNumberB);
if(补体关联!=null){
添加(新元组(teamA、teamB、availableLineNumberA、availableLineNumberB、complementartyLine.NumberOfFaultsHomeHome));
}
}
}
}
}
teamAvailableLineNumbers=字典
,其中
列表
是其所在组的可用位置

我如何创建一个算法/数据结构来计算和保存未知数量的团队的此类信息,这些团队拥有未知数量的可用职位


我希望有人能帮我解决这个问题。

每个团队都是由8个团队组成的
团队,我不知道你的意思-你能重新表述一下吗?也许你也可以简短地介绍一下你想要结束的数据结构,例如,你在描述“团队”中的“位置”——这是什么?首先,不清楚错误与团队在团队中的位置有什么关系。第二,什么应该决定一个团队的位置。你说错误决定一切。但错误只是一个数字。实际的标准是什么?(现在你刚刚告诉我们,团队应该按照某个数字的某个值进行排列——这并没有说明任何具体情况,不是吗?)当你设法对你想要实现的目标做出详细而具体的解释时,我不会感到惊讶,您同时还将拥有您应该/可以编写的代码的蓝图……听起来您对“在运行时更改循环的数量”之类的东西感兴趣,这取决于X,团队的数量。也许我最近在另一个问题上发布的这个答案很有帮助:明天我将尝试以更好的方式解释