C#-将列表拆分为n个子列表
我想将一个列表拆分为“n”个子列表 我有一份班主任名单和一份学生名单。每个学生分配给一名班主任,每个班主任可以有多个学生。表单教师列表是动态的-它是根据表单上的复选框选择填充的(即:列表中可能有一个、三个、六个等)C#-将列表拆分为n个子列表,c#,linq,C#,Linq,我想将一个列表拆分为“n”个子列表 我有一份班主任名单和一份学生名单。每个学生分配给一名班主任,每个班主任可以有多个学生。表单教师列表是动态的-它是根据表单上的复选框选择填充的(即:列表中可能有一个、三个、六个等) //将选定的表单教师分配给学生的方法 私人表格教师(列表表格教师列表,列表学生列表) { int numFormTeachers=formTeacherList.Count; //按课程对学生进行分类——这确保了学生的群体身份。 studentList=studentList.Ord
//将选定的表单教师分配给学生的方法
私人表格教师(列表表格教师列表,列表学生列表)
{
int numFormTeachers=formTeacherList.Count;
//按课程对学生进行分类——这确保了学生的群体身份。
studentList=studentList.OrderBy(Student=>Student.CourseID.ToList();
//根据班主任人数将名单分开
List splitStudentList=splitList(numFormTeachers,studentList);
splitList()
方法是我试图将列表拆分为一个学生列表,但我遇到了一个问题。假设有3名教师-我似乎无法将列表拆分为3个子列表,而是最终得到了3名学生的列表
我真的很想得到一些帮助。我已经寻找了一个可能的解决方案,但每次我都会得到大小为“n”的列表,而不是数量为“n”的列表。如果这个问题以前已经回答过,请告诉我答案的方向。您正在尝试将列表划分为数量相等的
n
部分元素的r
请尝试分组方式:
var splitStudentList = studentList.Select((s, i) => new { s, i })
.GroupBy(x => x.i % numFormTeachers)
.Select(g => g.Select(x => x.s).ToList())
.ToList();
或者您可以创建自己的扩展方法来完成此操作。我在我的博客上介绍了如何正确完成此操作:
您是否尝试过为此查找GroupBy?请不要使用cameling MethodNames…
splitList()
=splitList()
…请参见=>
var splitStudentList = studentList.Select((s, i) => new { s, i })
.GroupBy(x => x.i % numFormTeachers)
.Select(g => g.Select(x => x.s).ToList())
.ToList();
public IEnumerable<IEnumerable<T>> Partition<T>(IEnumerable<T> source, int size)
{
var partition = new List<T>(size);
var counter = 0;
using (var enumerator = source.GetEnumerator())
{
while (enumerator.MoveNext())
{
partition.Add(enumerator.Current);
counter++;
if (counter % size == 0)
{
yield return partition.ToList();
partition.Clear();
counter = 0;
}
}
if (counter != 0)
yield return partition;
}
}
var splitStudentList = studentList.Partition(numFormTeachers)
.Select(x => x.ToList())
.ToList();