Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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#-将列表拆分为n个子列表_C#_Linq - Fatal编程技术网

C#-将列表拆分为n个子列表

C#-将列表拆分为n个子列表,c#,linq,C#,Linq,我想将一个列表拆分为“n”个子列表 我有一份班主任名单和一份学生名单。每个学生分配给一名班主任,每个班主任可以有多个学生。表单教师列表是动态的-它是根据表单上的复选框选择填充的(即:列表中可能有一个、三个、六个等) //将选定的表单教师分配给学生的方法 私人表格教师(列表表格教师列表,列表学生列表) { int numFormTeachers=formTeacherList.Count; //按课程对学生进行分类——这确保了学生的群体身份。 studentList=studentList.Ord

我想将一个列表拆分为“n”个子列表

我有一份班主任名单和一份学生名单。每个学生分配给一名班主任,每个班主任可以有多个学生。表单教师列表是动态的-它是根据表单上的复选框选择填充的(即:列表中可能有一个、三个、六个等)

//将选定的表单教师分配给学生的方法
私人表格教师(列表表格教师列表,列表学生列表)
{
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();