1

これは、GameBetting 関連のプロジェクトに関連しています。

次のクラスの 2 つの単純なリストがあります。

クラスの試合結果
{
int ユーザー ID、
倍額
}

次の 2 つのレポートは紙に印刷されます。

A) ゲームの勝者
支払い金額
10 -
14 -
15 -

B) ゲームの敗者
支払い金額
11 -
12 -
13 -
16 -

このようなレポートの列は紙の幅全体にスペースを残すため、両方のレポートをマージして次のレポートを準備する必要があります

ゲームの勝者 ゲームの敗者
uid 量 uid 量 | uid 量 uid 量
10 - 15 - 11 - 13 -
14 - 12 - 16 -

上記のレポートには、レポートごとに 2 つの列があります。
WinnerReport の行の長さは totalrecords/2 であるため、最初の 2 つのレコード
列と次の列の 1 レコード
したがって、最初に右側の列が埋められ、残りは左側の列に移動します
LosersReport も同様

勝者と敗者のレポートの行の長さは重要ではありません。ただし、それぞれのリスト内のレコード数に関しては等しい (+/- 1) 必要があります。

レポートの出力にプリンターを使用するため、すべてのレコードを1行に配置するクラスを作成しました

クラス MergeRow
{
    int uidWinCol1; // ユーザー ID、列 1 の勝者の金額
    ダブルamtWinCol1;  
    int uidWinCol2; // 列 2 の勝者の userid.amount
    ダブルamtWinCol2;
    int uidLosCol1;
    ダブルamtLosCol1;
    int uidLosCol2;
    ダブルamtLosCol2;
}

両方のリストをマージする方法についてのアドバイスが必要です。そのような方法はLinqでのみ可能であると思いますが、ポインターまたはリンクは役に立ちます。

ありがとうございました

4

1 に答える 1

1

勝者リストと敗者リストをそれぞれ 2 つに分割できます。したがって、4 つのサブリストがあります。

FirstOrDefaultこれで、各サブリストで を使用して のインスタンスを取得できますMergeRow。サブリストの 1 つが他のリストより先に空になった場合はDefaultIfEmpty、プレースホルダー項目で , を使用します。

コードは次のようになります。

        var winnersList = new List<Gameresults>();
        var losersList = new List<Gameresults>();

        //Populate the winnersList and losersList


        var winnersList1 = winnersList.Take(winnersList.Count/2).ToList();
        var winnersList2 = winnersList;
        var losersList1 = losersList.Take(losersList.Count/2).ToList();
        var losersList2 = losersList;

         var allLists = new List<List<Gameresults>> {winnersList1, winnersList2, losersList1, losersList2};
        var mergeRows = new List<MergeRow>();


        while (allLists.Any(l => l.Count > 0))
        {
            var resultsInOneRow = allLists.Select(l => l.DefaultIfEmpty(new Gameresults()).FirstOrDefault()).ToList();
            mergeRows.Add(GetMergeRow(resultsInOneRow));
        }

メソッドGetMergeRow()は次のようになります。

        private MergeRow GetMergeRow(List<Gameresults> recordsToMerge)
        {
            var mergeRow = new MergeRow();
            mergeRow.uidWinCol1 = recordsToMerge[0].userid;
            mergeRow.amtWinCol1 = recordsToMerge[0].amount;
            //... and so on
            return mergeRow;
        }
于 2013-06-01T05:57:16.610 に答える