在使用linq查找IGrouping中的重复项

3

我希望能够获取同一玩家参与的游戏数量。例如,Lisa参加了游戏7,也参加了1个其他游戏。Tim和Josh都参加了游戏2,但他们还参加了其他3个游戏。通过Igrouping是否存在比较组并查看值是否相同的方法?

public List<Game> DummyDataSet()
{
    dataSet.Add(new Game { GameNo = 1, FirstName = "Lisa" });
    dataSet.Add(new Game { GameNo= 2, FirstName = "Tim" });
    dataSet.Add(new Game { GameNo = 2, FirstName = "Josh" });
    dataSet.Add(new Game { GameNo = 3, FirstName = "Susan" });
    dataSet.Add(new Gamee { GameNo = 4, FirstName = "Tim" });
    dataSet.Add(new Gamee { GameNo = 5, FirstName = "Tim" });
    dataSet.Add(new Gamee { GameNo = 5, FirstName = "Josh" });
    dataSet.Add(new Game { GameNo = 6, FirstName = "Josh" });
    dataSet.Add(new Game { GameNo = 7, FirstName = "Lisa" });

    return dataSet;
}

public void numOfOtherMissions()
{
    List<Game> something;
    something = DummyDataSet();
    var grouped = something.ToLookup(x => x.GameNo, x => x.FirstName);
    foreach (IGrouping<int, string> item in grouped)
    {
        Console.Write(item.Key);
        Console.Write(": ");
        var result = grouped.ToLookup(z => FirstName);
        foreach (var value in item)
        {
            int games = 0;
            if(result == item)
            {
                othergames++;
            }
            else
            {
                othergames = 0;
            }
            Console.Write(value + " " + othergames);
            Console.WriteLine();
        }
    }
}

你到底想得到什么?你想按照游戏中确切的玩家分组吗?你能给出一个输出示例吗? - Yacoub Massad
我在你的示例中看不到Sam或Ilya。请提供你在问题中提供的示例的输出。 - Yacoub Massad
现在的输出看起来像这样。第一组允许我将相同的键与每个值分组。接下来,每个名称应该显示他们玩过多少其他游戏。我猜最好的方法是比较不同的键并查看值是否相同。 GameNo 1:Lisa 0 GameNo 2:Tim 0 Josh 0 GameNo 3:Susan 0 GameNo 4:Tim 0 GameNo 5:Tim 0 Josh 0 GameNo 6:Josh 0 GameNo 7:Lisa 0 - Allee Clark
游戏编号1: Lisa 1 游戏编号2: Tim 2 Josh 2 游戏编号3: Susan 0 游戏编号4: Tim 2 游戏编号5: Tim 2 Josh 2 游戏编号6: Josh 2 游戏编号7: Lisa 1 - Allee Clark
1个回答

1

您无法使用当前查找来获取所需的信息。您需要再次查询列表以获取每个人的游戏数量。以下是一个示例:

public void numOfOtherMissions(List<Game> something)
{
    var grouped = something.ToLookup(x => x.GameNo, x => x.FirstName);

    //Create a dictionary that holds the number of games for each person
    var gamesForPerson =
        something
        .GroupBy(x => x.FirstName)
        .ToDictionary(x => x.Key, x => x.Count());

    foreach (IGrouping<int, string> item in grouped)
    {
        Console.Write(item.Key);
        Console.Write(": ");

        foreach (var value in item)
        {
            //Get total number of games for this person and subtract 1
            var othergames = gamesForPerson[value] - 1;

            Console.Write(value + " " + othergames);
            Console.WriteLine();
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接