1

这与 GameBetting 相关项目有关。

我们有两个简单的以下类列表。

类游戏结果
{
int用户ID,
双倍金额
}

以下两份报告打印在纸上。

A) 比赛获胜者
液体量
10 -
14 -
15 -

B) 输家
液体量
11 -
12 -
13 -
16 -

由于此类报告中的列在论文的宽度上留有空间,因此我们必须合并两个报告并准备以下报告

游戏赢家 游戏输家
uid 金额 uid 金额 | uid 金额 uid 金额
10 - 15 - 11 - 13 -
14 - 12 - 16 -

上述报告的每个报告有两列。
WinnerReport 的行长度是 totalrecords/2 ,因此首先有两条记录
列和下一列中的 1 条记录
所以首先右列被填满,剩下的到左列
LosersReport 也一样

赢家与输家报告的行长度并不重要。但是,它们在各自列表中的记录数必须相等 (+/- 1)

我创建了一个类将所有记录放在一行中,因为我们使用打印机输出报告

类 MergeRow
{
    int uidWinCol1; // 用户 ID,第 1 列的获胜者数量
    双 amtWinCol1;  
    int uidWinCol2; // userid.amount 在第 2 列的获胜者
    双 amtWinCol2;
    int uidLosCol1;
    双 amtLosCol1;
    int uidLosCol2;
    双 amtLosCol2;
}

我需要关于如何合并两个列表的部分建议,我认为这种方法只能在 Linq 中使用,但任何指针或链接都会有所帮助。

谢谢你

4

1 回答 1

1

您可以将获胜者列表和失败者列表分成两半。因此,您将有 4 个子列表。

现在您可以FirstOrDefault在每个子列表上使用来获取MergeRow. 如果其中一个子列表在其他子列表之前变为空,请使用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 回答