从C#中的对象列表创建组

Dim*_*nis 1 c# grouping list

我有一个名为Team的对象列表,我想创建它们的组但不按顺序,随机化.组号被赋予功能以及列表

public List<List<Team>> GenerateGroups(List<Team> teams, int amount)
{
    List<List<Team>> result = new List<List<Team>>();
    for (int i = 0; i < amount; ++i)
        result.Add(new List<Team>());
    foreach(Team team in teams)
    {
        //Add something           
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我被困在这里.我不确定如何添加团队.此外,如果有人可以压缩我的代码,它将非常有用.我不需要它返回List>如果有人有更好的主意.

Gil*_*een 7

这会teams随机订购,然后将它们分组.列表中的输出组数量取决于amount参数:

public static List<List<Team>> GenerateGroups(List<Team> teams, int amount)
{
    return teams.OrderBy(item => Guid.NewGuid())
            .Select((item, index) => new { Item = item, GroupIndex = index % amount })
            .GroupBy(item => item.GroupIndex, 
                     (key, group) => group.Select(groupItem => groupItem.Item).ToList())
            .ToList();
}
Run Code Online (Sandbox Code Playgroud)

也可以随机使用Random该类,但我会用它来创建订单而不是group by它.像这样:

public static List<List<Team>> GenerateGroups(List<Team> teams, int amount)
{
    Random random = new Random();
    return teams.OrderBy(item => random.NextDouble())
            .Select((item, index) => new { Item = item, GroupIndex = index % amount })
            .GroupBy(item => item.GroupIndex,
                     (key, group) => group.Select(groupItem => groupItem.Item).ToList())
            .ToList();
}
Run Code Online (Sandbox Code Playgroud)