双重淘汰赛的数据结构

Fry*_*Guy 8 c# tdd mvvm tournament data-structures

我正在转换我的Tournament Organizer软件,它允许创建和操作Double Elimination Tournaments,使用MVVM设计模式,以便更容易测试.在这样做的时候,我将'模型'与UI中直接操作括号结构的一些代码分开.

这将是我为处理锦标赛而编写的第三次软件迭代.第一个是用PHP编写的,并将数据存储在数据库中.第二个版本是我制作的WPF版本,它将数据存储在内存中,然后将其序列化为XML文件.但是,在这两个版本中,我认为实施的各个方面都不干净,而且看起来他们违反了DRY法则.

如果您从头开始创建数据结构以处理双重消除括号,您将如何做?

请注意,它不需要能够在算法上自动生成括号(从4/8/16/32人的预制双重消除加载是我现在正在做的),只是主要的用例设置比赛的获胜者并通过括号'推进'他们.

编辑:为了说清楚,数据结构需要处理双重淘汰赛,因此,一场比赛的胜利者最终可能会与另一场比赛的输家竞争.

Fry*_*Guy 1

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

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

class MatchSeat
{
    string Id;
    Entry Entry;
}
Run Code Online (Sandbox Code Playgroud)

然后为了设置它,我创建了一些辅助函数来获取括号信息并构建结构。

{ "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" }
Run Code Online (Sandbox Code Playgroud)

然后,当种子和获胜者/失败者被填写时,该值仅设置在一处。