C# 从C中的对象列表创建组#
我有一个名为Team的对象列表,我想创建一组对象,但不按顺序随机创建。组编号与列表一起提供给函数C# 从C中的对象列表创建组#,c#,list,grouping,C#,List,Grouping,我有一个名为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;
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;
}
公共列表生成组(列表团队,整数金额)
{
列表结果=新列表();
对于(int i=0;i
我被困在这里了。我不知道如何添加团队。另外,如果有人能压缩我的代码,这将是非常有帮助的。如果有人有更好的想法,我不需要它来返回List>。我认为您最好定义
Group
类,如:
class Group {
List<Team> teams;
}
类组{
列出小组名单;
}
关于添加团队:
Random rnd = new Random();
List<Group> groups = new List<Group>();
for (int i = 0; i < amount; ++i)
groups.Add(new Group());
foreach(Team team in teams)
{
int index = rnd.Next(0, amount);
groups[index].Add(team);
}
return groups;
Random rnd=new Random();
列表组=新列表();
对于(int i=0;i
我认为您最好定义组
类,如:
class Group {
List<Team> teams;
}
类组{
列出小组名单;
}
关于添加团队:
Random rnd = new Random();
List<Group> groups = new List<Group>();
for (int i = 0; i < amount; ++i)
groups.Add(new Group());
foreach(Team team in teams)
{
int index = rnd.Next(0, amount);
groups[index].Add(team);
}
return groups;
Random rnd=new Random();
列表组=新列表();
对于(int i=0;i
这将随机对您的团队进行排序,然后将他们分组。列表中输出组的数量取决于数量
参数:
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();
}
这将随机排列团队
,然后将他们分组。列表中输出组的数量取决于数量
参数:
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();
}
这一个给出了没有重复项的随机组:
private static Random _rnd = new Random();
private static Team GetAndRemoveRandomTeam(List<Team> allTeams)
{
int randomIndex = _rnd.Next(allTeams.Count);
Team randomTeam = allTeams[randomIndex];
allTeams.RemoveAt(randomIndex);
return randomTeam;
}
public static List<List<Team>> GenerateGroups(List<Team> teams, int amount)
{
int teamCount = (int) teams.Count/amount;
List<Team> allteams = teams.ToList(); // copy to be able to remove items
if (teamCount == 0)
return new List<List<Team>> {allteams};
List<List<Team>> allTeamGroups = new List<List<Team>>();
List<Team> thisTeam = new List<Team>();
while (allteams.Count > 0)
{
if (thisTeam.Count == amount)
{
allTeamGroups.Add(thisTeam);
thisTeam = new List<Team>();
}
thisTeam.Add(GetAndRemoveRandomTeam(allteams));
}
allTeamGroups.Add(thisTeam);
return allTeamGroups;
}
private static Random\u rnd=new Random();
私有静态团队GetandReveRandomTeam(列出所有团队)
{
int randomIndex=\u rnd.Next(allTeams.Count);
团队随机团队=所有团队[随机索引];
allTeams.RemoveAt(随机索引);
返回团队;
}
公共静态列表生成器组(列表团队,整数金额)
{
int teamCount=(int)teams.Count/amount;
List allteams=teams.ToList();//复制以删除项目
如果(团队计数==0)
返回新列表{allteams};
List allTeamGroups=新列表();
List thisTeam=新列表();
while(allteams.Count>0)
{
如果(thisTeam.Count==金额)
{
添加(此团队);
thisTeam=新列表();
}
添加(GetAndRemoveRandomTeam(allteams));
}
添加(此团队);
返回所有团队;
}
这一个随机分组没有重复:
private static Random _rnd = new Random();
private static Team GetAndRemoveRandomTeam(List<Team> allTeams)
{
int randomIndex = _rnd.Next(allTeams.Count);
Team randomTeam = allTeams[randomIndex];
allTeams.RemoveAt(randomIndex);
return randomTeam;
}
public static List<List<Team>> GenerateGroups(List<Team> teams, int amount)
{
int teamCount = (int) teams.Count/amount;
List<Team> allteams = teams.ToList(); // copy to be able to remove items
if (teamCount == 0)
return new List<List<Team>> {allteams};
List<List<Team>> allTeamGroups = new List<List<Team>>();
List<Team> thisTeam = new List<Team>();
while (allteams.Count > 0)
{
if (thisTeam.Count == amount)
{
allTeamGroups.Add(thisTeam);
thisTeam = new List<Team>();
}
thisTeam.Add(GetAndRemoveRandomTeam(allteams));
}
allTeamGroups.Add(thisTeam);
return allTeamGroups;
}
private static Random\u rnd=new Random();
私有静态团队GetandReveRandomTeam(列出所有团队)
{
int randomIndex=\u rnd.Next(allTeams.Count);
团队随机团队=所有团队[随机索引];
allTeams.RemoveAt(随机索引);
返回团队;
}
公共静态列表生成器组(列表团队,整数金额)
{
int teamCount=(int)teams.Count/amount;
List allteams=teams.ToList();//复制以删除项目
如果(团队计数==0)
返回新列表{allteams};
List allTeamGroups=新列表();
List thisTeam=新列表();
while(allteams.Count>0)
{
如果(thisTeam.Count==金额)
{
添加(此团队);
thisTeam=新列表();
}
添加(GetAndRemoveRandomTeam(allteams));
}
添加(此团队);
返回所有团队;
}
组的大小必须相等吗?静态随机rnd=new Random();var randomObjectIndex=rnd.Next(list.Count);var FinallList.Add(list[randomObjectIndex])
从中获取随机对象的方法list@KevinLee否,因为我需要为团队和金额变量添加额外的限制。我现在试着让它工作。@MKasprzyk对象列表是预定义的。我想把它们随机放置。分组随机<代码>随机=新随机();teams.GroupBy(p=>random.Next(amount))
。请注意,a比Random和GUID好。组的大小必须相等吗?static Random rnd=new Random();var randomObjectIndex=rnd.Next(list.Count);var FinallList.Add(list[randomObjectIndex])
从中获取随机对象的方法list@KevinLee否,因为我需要为团队和金额变量添加额外的限制。我现在试着让它工作。@MKasprzyk对象列表是预定义的。我想把它们随机放置。分组随机<代码>随机=新随机();teams.GroupBy(p=>random.Next(amount))。请注意,a比Random和GUID更好。这就是我稍后要做的。现在,我正在寻找括号中的代码,在括号中有注释,这是我稍后要做的。现在,我正在寻找括号中的代码,其中包含comments@Tonio-见我的编辑。我不会为分组做这件事,因为Random
可能会给我两次相同的数字-然后如果我按它分组,那么我会得到不均匀大小的组。我认为你的解决方案是好的,可以压缩。让我用我的代码来测试一下,我建议NextDouble()
到Next(teams.Count)
,你会得到更好的随机性,我相信它也会更有效一分钟,而且Guid速度很快,但不像它应该的那样随机。如果您需要更高质量的随机性,请使用RNGCryptoServiceProvider
(但速度会更慢)。@GiladGreen是的,但没有重复。我甚至尝试了一个50个对象的列表。我会投票认为它是正确的。@Tonio-请看我的编辑。我不会这样做分组,因为Random
可能会给我两次相同的数字-然后如果我按它分组,我会得到不均匀大小的组