Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定玩最多游戏的玩家_C#_Linq - Fatal编程技术网

C# 确定玩最多游戏的玩家

C# 确定玩最多游戏的玩家,c#,linq,C#,Linq,我有一个包含玩家编号的类 public class Game { public int blackPlayer { get; set; } public int whitePlayer { get; set; } } 还有 List<Game> games; 列表游戏; 我想知道哪个球员号码在名单中出现最多(不管他们是黑人还是白人)。有人知道一个好的LINQ表达式吗?以下内容应该可以实现您的目标: var q = (from g in games

我有一个包含玩家编号的类

public class Game {
    public int blackPlayer { get; set; }
    public int whitePlayer { get; set; }
}
还有

List<Game> games;
列表游戏;

我想知道哪个球员号码在名单中出现最多(不管他们是黑人还是白人)。有人知道一个好的LINQ表达式吗?

以下内容应该可以实现您的目标:

var q = (from g in games
        from p in new[] {g.blackPlayer, g.whitePlayer}
        group p by p into pgroup
        orderby pgroup.Count() descending
        select new { Player = pgroup.Key,  Count =  pgroup.Count() }).FirstOrDefault();


Console.WriteLine("Player # {0} played {1} times which is the most", q.Player,  q.Count);

以下几点应该可以实现您的目标:

var q = (from g in games
        from p in new[] {g.blackPlayer, g.whitePlayer}
        group p by p into pgroup
        orderby pgroup.Count() descending
        select new { Player = pgroup.Key,  Count =  pgroup.Count() }).FirstOrDefault();


Console.WriteLine("Player # {0} played {1} times which is the most", q.Player,  q.Count);

如果你想要所有的领带

List<int> mostFrequentPlayers = games.Select(g => g.blackPlayer)
  .Concat(games.Select(g => g.whitePlayer))
  .GroupBy(p => p) //into g
  .GroupBy(g => g.Count()) //into g2
  .OrderByDescending(g2 => g2.Key)
  .First()
  .SelectMany(g2 => g2, g => g.Key) //unpack g2 as g.Key
  .ToList();
列出最频繁的玩家=游戏。选择(g=>g.blackPlayer)
.Concat(games.Select(g=>g.whitePlayer))
.GroupBy(p=>p)//变成g
.GroupBy(g=>g.Count())//进入g2
.OrderByDescending(g2=>g2.Key)
.First()
.SelectMany(g2=>g2,g=>g.Key)//将g2解包为g.Key
.ToList();

如果你想要所有的领带

List<int> mostFrequentPlayers = games.Select(g => g.blackPlayer)
  .Concat(games.Select(g => g.whitePlayer))
  .GroupBy(p => p) //into g
  .GroupBy(g => g.Count()) //into g2
  .OrderByDescending(g2 => g2.Key)
  .First()
  .SelectMany(g2 => g2, g => g.Key) //unpack g2 as g.Key
  .ToList();
列出最频繁的玩家=游戏。选择(g=>g.blackPlayer)
.Concat(games.Select(g=>g.whitePlayer))
.GroupBy(p=>p)//变成g
.GroupBy(g=>g.Count())//进入g2
.OrderByDescending(g2=>g2.Key)
.First()
.SelectMany(g2=>g2,g=>g.Key)//将g2解包为g.Key
.ToList();

除了您最初的问题,我发现您的命名方案非常混乱。我花了很长时间才弄明白黑色实际上意味着玩家号码谁是黑色的。我把“黑”和“白”改成了“黑玩家”和“白玩家”。白玩家和黑玩家是一样的吗?弗朗西斯科,黑玩家!=除了你最初的问题,我发现你的命名方案非常混乱。我花了很长时间才弄明白黑色实际上意味着玩家号码谁是黑色的。我把“黑”和“白”改成了“黑玩家”和“白玩家”。白玩家和黑玩家是一样的吗?弗朗西斯科,黑玩家!=游戏列表中每个元素的whiteplayer。