C# .NetCoreで、ボートレース結果の解析　構造検討

# やること
C# .NetCoreで、ボートレース結果の解析の前調査
https://qiita.com/TamanegiTarao/items/02a634c36131ca85837e
をもとに、取得データ構造の検討を行う。
前回の記事では読みこみ迄やりたかったけど、長くなりそうだから
今回はここまでにする。

## データ構造
前回の内容より、取得データの内容の検討する。
データ量が多くなることが想定されるため、
いくつかデータを以下の通り分ける。

## 節間タイトル
- 名前
- グレード情報
- 開催期間

節間のタイトルに関する情報、グレード情報が解析時必要となるため。
グレード情報は手作業にならざるを得ない。

```
    public enum Internode1
    {
        General = 0,
        G3,
        G2,
        G1,
        SG,
    }

    public enum Internode2
    {
        Masters = 0,
        Wemen,
    }

    public class InternodeTitle
    {
        public string Title;
        public Internode1 Internode1;
        public Internode2 Internode2;
        public DateTime Start;
        public DateTime End;
    }
```

## レース名
- 名前
- 特徴

レースの名前と特徴をまとめる。
特徴とは、進入固定や準優、優勝戦、シード番組など。
特徴をまとめるには手作業現状、手作業にならざるを得ない。

```
    public class RaceTitle
    {
        public string Title;
        public bool FixedApproach;
        public bool SemiFinal;
        public bool Final;
        public bool Seed;
    }
```
## レース
- 開催場
- 開催日
- 節間日
- レース番号

レース内容の基本的な情報。レース結果と、レース情報の紐づけに使用する。

```
    public class Race
    {
        public int Place;
        public DateTime Date;
        public int InDay;
        public int RaceNum;
    }
```

## レース結果
- 単勝
- 複勝
- ２連単
- ２連複
- ３連単
- ３連複
- 各連複

配当情報。レース、選手に紐づけるのが目的。
組み合わせ、人気、配当が対象。

```
    public class ResultOne
    {
        public int Popler;
        public int Yen;
        public int First;
    }

    public class ResultTwo : ResultOne
    {
        public int Second;
    }

    public class ResultThree: ResultTwo
    {
        public int Thired;
    }


    public class RaceResult
    {
        public Race Race;
        public ResultOne Tansho;
        public ResultOne Fukusho1;
        public ResultOne Fukusho2;
        public ResultTwo NirenTan;
        public ResultTwo NirenFuku;
        public ResultThree SanrenTan;
        public ResultThree SanrenFuku;
        public ResultTwo Kakuren1;
        public ResultTwo Kakuren2;
        public ResultTwo Kakuren3;
    }
```

## レース情報
- 節間タイトル
- レース名
- レース結果
- レース
- 決まり手
- 風向
- 風速
レースのセンス情報以外の内容。
上記の、節間タイトル、レース名、レース結果を含む。

```
    public enum WindDirection { None, N, NE, E, ES, S, SW, W, WN };
    public enum Kimarite { Nige, Makuri, Sashi, Makurisashi, Megumare, Nuki, Huseiritsu }
    public class RaceInfo
    {
        public InternodeTitle InternodeTitle;
        public RaceTitle RaceTitle;
        public Race Race;
        public RaceResult RaceResult;
        public Kimarite Kimarite;
        public WindDirection WindDirection;
        public int WindMetor;
    }
```

## 選手成績
- レース情報
- 着順
- 枠番
- 進入
- 登録番号
- ﾓｰﾀｰ
- ﾎﾞｰﾄ
- 展示
- スタート

選手成績は選手に限定する情報のみにして、他の内容は、レース情報に紐づけておく。
レースタイムはあまり意味がない気がしているので除外する。

```
    public class PlayerResult
    {
        public RaceInfo RaceInfo;
        public int Number;
        public int Result;
        public int Wakuban;
        public int Cource;
        public int Motor;
        public int Boat;
        public double Tenji;
        public double Start;
    }
```

## レース結果まとめ
- 節間タイトルリスト
- レース名リスト
- レース結果リスト
- 選手結果リスト

選手結果リストは、必要に応じてメンバリストの内容を紐づけることが前提。

```
    public class RaceResults
    {
        public List<InternodeTitle> InternodeTitles;
        public List<RaceTitle> RaceTitles;
        public List<RaceResult> Results;
        public List<PlayerResult> PlayerResults;
    }   
```

## まとめ
今回はレースのデータ構造について検討を行った。
構造の是非はともかくこれで、要素ごとに分割した内容ができそうな予感はしている。
前置きが長くなってきているのが反省点。
次回は、実際にファイルを読んでみたいと思う。
だがしかし、すべてを読み込もうとするとボリュームが増えそうなので、
絞って記載しようかと考えている。

次回
C# .NetCoreで、ボートレース結果の解析　読み込みその1
https://qiita.com/TamanegiTarao/items/33284c3111a547b0ee8d