Goo*_*ess 2 c# collections class
我的主要对象类别包含玩家数据:姓名,得分和球队。我还有另一个容器类,我把所有这些球员放进去。我和他们一起做一些动作,例如找出谁得分最高等,一切都很好,但是。不知何故,我需要列出所有包含团队的清单,并计算每个团队的分数。我想问一下,有什么方法可以正确地做到这一点?因为所有球员可能都可以拥有不同的球队,也可以拥有同一支球队,所以需要做到没有重复。
我试图使
private string[] Team;
Run Code Online (Sandbox Code Playgroud)
在我的Container类中,但是意识到这将是艰巨的工作,并且这也将使我的类不是容器。
这是我的课程的样子(我只放了一部分而不是完整的课程,因为我认为没有必要),而没有做任何尝试:
class Player
{
private string name;
private string team;
private int score;
}
class Container
{
const int Cn = 500;
private Player[] Pl;
public int Count { get; set; }
public Container()
{
Count= 0;
Pl = new Player[Cn];
}
}
Run Code Online (Sandbox Code Playgroud)
因此,假设我的容器中有2个对象。它们包含的数据是:
Name Score Team
Matt 15 Alfa
Oreo 5 Beta
Bean 7 Alfa
Run Code Online (Sandbox Code Playgroud)
我希望结果是:
List of teams and their score:
Alfa 22
Beta 5
Run Code Online (Sandbox Code Playgroud)
这是使用Linq GroupBy和Sum的一种解决方案。我对您Player和Container类进行了一些修改,您看到(1)List<Player>作为数据存储而不是数组,以及(2)Player类中的公共属性:
class Player
{
public string Name { get; set; }
public string Team { get; set; }
public int Score { get; set; }
}
class Container
{
private IList<Player> _players;
public Container()
{
_players = new List<Player>();
}
public void Add(Player p) => _players.Add(p);
public IList<(string Team, int Sum)> GetTeamStats()
{
return _players
.GroupBy(g => g.Team)
.Select(r => ( Team : r.Key, Sum : r.Sum(s => s.Score)))
.ToList();
}
}
class Program
{
static void Main(string[] args)
{
var cont = new Container();
cont.Add(new Player { Name = "Matt", Score = 15, Team="Alfa" });
cont.Add(new Player { Name = "Oreo", Score = 5, Team = "Beta" });
cont.Add(new Player { Name = "Bean", Score = 7, Team = "Alfa" });
var teamStats = cont.GetTeamStats();
foreach (var team in teamStats)
{
Console.WriteLine($"{team.Team} {team.Sum}");
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Alfa 22
Beta 5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41 次 |
| 最近记录: |