C# 在C语言中将平面数据转换成嵌套组的有效方法
我的任务是在C中将平面数据转换为双嵌套组 我完成了,但看起来很难看。我想知道是否有人能帮我指出如何使它更有效率。提前谢谢你 数据看起来不像是确切的数据和类:C# 在C语言中将平面数据转换成嵌套组的有效方法,c#,performance,linq,nested,C#,Performance,Linq,Nested,我的任务是在C中将平面数据转换为双嵌套组 我完成了,但看起来很难看。我想知道是否有人能帮我指出如何使它更有效率。提前谢谢你 数据看起来不像是确切的数据和类: classFlatData = [{Class: Class1, Group: Group1, StudentName: Student1, StudentAge: 17}, {Class: Class1, Group: Group2, StudentName: Student2, StudentAge:
classFlatData = [{Class: Class1, Group: Group1, StudentName: Student1, StudentAge: 17},
{Class: Class1, Group: Group2, StudentName: Student2, StudentAge: 17},
{Class: Class2, Group: Group1, StudentName: Student3, StudentAge: 17},
{Class: Class2, Group: Group1, StudentName: Student4, StudentAge: 18}]
输出应该是这样的:
classData = [{Class:Class1,
ClassStudentCount:2,
Groups:[{Group:Group1,
GroupStudentCount:1,
Students:[{StudentName: Student1, StudentAge:17},
{Group:Group2,
GroupStudentCount:1,
Students:[{StudentName: Student2, StudentAge:17}]}
]
},
{Class:Class2,
ClassStudentCount:2,
Groups:[{Group:Group1,
GroupStudentCount:2,
Students:[{StudentName: Student3, StudentAge:17},
{StudentName: Student4, StudentAge:18}]}
]
}]
输出C类:
public class ClassModel
{
public string Class {get;set}
public int ClassStudentCount {get;set;}
public List<GroupModel> Groups {get;set;}
}
public class GroupModel
{
public string Class {get;set;}
public string Group {get;set;}
public int GroupStudentCount {get;set;}
public List<Student> Students {get;set}
}
public class StudentModel
{
public string StudentName {get;set;}
public int StudentAge {get;set;}
}
我在想,有没有办法让它变成一个过程,而不是现在的两个部分
有没有一种方法可以减少循环次数,提高循环效率
非常感谢简化了一点。您不需要按键筛选已分组的记录。此外,可以使聚合更为优化 var groupData= 从classFlatData中的d开始 d组由新的{d.类,d.组}组成 选择新的GroupModel { Class=group.Key.Class, Group=Group.Key.Group, GroupStudentCount=group.Count, 学生=团体 .Selects=>newstudentmodel { StudentName=s.StudentName, StudentAge=s.StudentAge } 托利斯先生 }; 变量类数据= 来自groupData中的g 按新{g.Class}将g分组到类中 选择新的类模型 { Class=classes.Key.Class, ClassStudentCount=classes.Sumx=>x.GroupStudentCount, Groups=classes.ToList };
对我来说,我认为分割这种逻辑是完全好的,甚至是被建议的,因为它可以提高可读性。否则,如果你在一个大问题中让人很难理解,其他团队成员会诅咒你。仅供参考,这类问题属于你。非常感谢你的帮助!我真的从你身上学到了很多!我只是在谷歌上搜索了如何接受答案,并在上面做了标记:再次感谢!
var groupData = from d in classFlatData
group d by new {d.Class, d.Group} into group
select new GroupModel
{
Class = group.Key.Class,
Group = group.Key.Group,
GroupStudentCount = group.Count(),
Students = group.Where(g => g.Class == group.Key.Class && g.Group == group.Key.Group).Select(s => new StudentModel(){
StudentName = s.StudentName,
StudentAge = s.StudentAge
}).ToList()
};
var classData = from g in groupData
group g by new {g.Class} into classes
select new ClassModel()
{
Class = classes.Key.Class,
ClassStudentCount = classes.Where(g => g.Class == classes.Key.Class).Select(g => g.GroupStudentCount).ToList().Sum(),
Groups = classes.Where( g => g.Class == classes.Key.Class).ToList()
}