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

规范

我想将一个列表分成n个子列表。

我有一个名单老师和一个学生名单。每个学生分配给一位表格老师,每位表格老师可以拥有多位学生。表单教师的列表是动态的-根据表单上的复选框选择进行填充(即:列表中可能有一个,三个,六个等)。

//A method to assign the Selected Form teachers to the Students
private void AssignFormTeachers(List<FormTeacher> formTeacherList, List<Student> studentList)
{
    int numFormTeachers = formTeacherList.Count;

    //Sort the Students by Course - this ensures cohort identity.
    studentList = studentList.OrderBy(Student => Student.CourseID).ToList();

    //Split the list according to the number of Form teachers
    List<List<Student>> splitStudentList = splitList(numFormTeachers , studentList);

splitList()方法是我尝试将列表拆分为学生列表列表的地方,但是遇到了问题。假设有3位表单老师-我似乎无法将列表分为3个子列表,而最终得到3个学生列表。

我真的很感谢您的帮助。我一直在寻找一种可能的解决方案,但是每次我最终得到的列表大小都是'n',而不是数量为'n'的列表时。如果以前已经回答了这个问题,请指出该回答的方向。

马辛·侏罗纪

您正在尝试将列表划分n为元素数量相等的部分吗?

尝试GroupBy

var splitStudentList = studentList.Select((s, i) => new { s, i })
                                  .GroupBy(x => x.i % numFormTeachers)
                                  .Select(g => g.Select(x => x.s).ToList())
                                  .ToList();

或者,您可以创建自己的扩展方法来执行此操作。我已经在我的博客上描述了正确的方法:使用LINQ对集合进行分区:不同的方法,不同的性能,相同的结果

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();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

将字节列表拆分为位置列表C#

来自分类Dev

在C#中使用分隔符而不是按索引将列表拆分为子列表

来自分类Dev

C#根据某个属性的值将列表拆分为子列表?

来自分类Dev

将多个字符串拆分为C#中的对象列表

来自分类Dev

如何将文本框文本拆分为列表框C#

来自分类Dev

如何在C#中将列表拆分为多个部分?

来自分类Dev

在 C# 中将大整数列表拆分为字符串列表的最快方法

来自分类Dev

C# 拆分 double[][] 的列表

来自分类Dev

在C#中将字符串拆分为字符串数组列表

来自分类Dev

将一个列表中的 8 个元素拆分为另一个 C# 的第一个元素

来自分类Dev

如何将对象列表拆分为按元素分组的子列表(日期时间和字符串)C#

来自分类Dev

将列表拆分为列表列表

来自分类Dev

根据Java中的元素属性将列表拆分为多个子列表

来自分类Dev

将字符串拆分为数组C#

来自分类Dev

C#将字符串拆分为Excel

来自分类Dev

C#将算术表达式拆分为string []

来自分类Dev

C#将字符串拆分为组合框

来自分类Dev

将字符串拆分为数组C#

来自分类Dev

根据C#列将DataTable拆分为多个DataTable

来自分类Dev

C#将算术表达式拆分为string []

来自分类Dev

如何在C ++中将整数链接列表递归拆分为奇数和偶数列表?

来自分类Dev

将列表拆分为单独的列表

来自分类Dev

将列表拆分为值列表

来自分类Dev

将网址列表拆分为单独的列表

来自分类Dev

将列表拆分为嵌套列表

来自分类Dev

将嵌套列表拆分为单独的列表

来自分类Dev

将列表拆分为块索引列表

来自分类Dev

将列表拆分为最大长度的列表

Related 相关文章

热门标签

归档