Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 双Elmination锦标赛的数据结构_C#_Data Structures_Mvvm_Tdd_Tournament - Fatal编程技术网

C# 双Elmination锦标赛的数据结构

C# 双Elmination锦标赛的数据结构,c#,data-structures,mvvm,tdd,tournament,C#,Data Structures,Mvvm,Tdd,Tournament,我正在将我的锦标赛组织者软件(允许创建和操作双淘汰赛)转换为使用MVVM设计模式,以便更容易测试。在这样做的过程中,我将“模型”从UI中直接操作括号结构的一些代码中分离出来 这将是我为处理锦标赛而编写的软件的第三次迭代。第一个是用PHP编写的,并将数据存储在数据库中。第二个版本是我制作的WPF版本,它将数据存储在内存中,然后将其序列化为XML文件。然而,在这两个版本中,我觉得实现的某些方面并不干净,似乎它们违反了干法 如果您是从头开始创建一个数据结构来处理双消元括号,您会怎么做? 请注意,它不需

我正在将我的锦标赛组织者软件(允许创建和操作双淘汰赛)转换为使用MVVM设计模式,以便更容易测试。在这样做的过程中,我将“模型”从UI中直接操作括号结构的一些代码中分离出来

这将是我为处理锦标赛而编写的软件的第三次迭代。第一个是用PHP编写的,并将数据存储在数据库中。第二个版本是我制作的WPF版本,它将数据存储在内存中,然后将其序列化为XML文件。然而,在这两个版本中,我觉得实现的某些方面并不干净,似乎它们违反了干法

如果您是从头开始创建一个数据结构来处理双消元括号,您会怎么做?

请注意,它不需要通过算法自动生成括号(从4/8/16/32人预先制定的双重淘汰中加载是我现在的做法),只是设置比赛赢家并通过括号“推进”他们的主要用例


编辑:为了说明这一点,数据结构需要处理双淘汰赛,因此,一场比赛的赢家可能最终与另一场比赛的输家竞争。

第一轮从叶节点开始,然后向上移动的完整二叉树怎么样

所以,在终点,你们有64支球队。所以有一个集合,不知怎的,有64支队伍

但他们是成对的,每对都有一个赢家。在中间括号中,赢家实际上是从括号中出现的,所以我认为你的括号物体看起来像:

public class Bracket
{
    Team winner;  //if this is null or whatever, then we don't have a winner yet
    Bracket topBracket;  
    Bracket bottomBracket;
}
…当你实例化你的目标时,你只需将两个子括号保留为空,只有一个获胜者


要处理双重淘汰,还有第二个括号,即失败者括号。如果您能够自动处理将输家添加到这个括号中(设计一个从32开始的括号,从16开始,从赢家括号第2轮添加16个输家,等等),那将是很好的,但这就是全部实现。数据结构不需要改变以适应这一点,您只需要更多的数据结构。

我刚刚在另一个问题的侧栏中注意到这个问题,我想我应该插话:

我正在开发一个全功能的锦标赛API,我正在开源它

它还没有创建双淘汰赛,但是最近修改了单淘汰赛的数据结构,以支持双elim树结构


我的解决方案是有两组数据结构。一个用于支架部分,一个用于座椅

class Match
{
    string Id;
    MatchSeat red;
    MatchSeat blue;
    MatchSeat winner;
    MatchSeat loser;
}

class MatchSeat
{
    string Id;
    Entry Entry;
}
然后为了设置它,我制作了一些助手函数,这些函数获取了括号信息并构建了结构

{ "1", "seed1", "seed4", "W1", "L1" },
{ "2", "seed2", "seed3", "W2", "L2" },
{ "3", "W1", "W2", "W3", "L3" },
{ "4", "L1", "L2", "W4", "L4" },
{ "5", "W4", "L3", "W5", "L5" },
{ "F", "W3", "W5", "WF", "WF" }

然后,当种子和赢家/输家填写完毕后,该值只在一个位置设置。

不幸的是,这不适用于双淘汰赛:(这很好,除了需要双淘汰(请参见编辑)是的,我看到并下载了它。不幸的是(幸运的是?),我已经实现了它,所以现在很难返回并重用其他东西:(嗯,你忘记了在回答中实际描述数据结构。