c# - 如何删除输出列表中的重复项?
问题描述
我对 c# 很陌生,并且正在编写一项任务,即输出年份、每年学习的课程以及上过该课程的学生。我从包含所有信息的外部文件中获取此信息。当我尝试输出这些值时,我得到了一门在 2 个不同年份上过的课程,但是学生们在这两年都出现了,而他们只上过一次。
foreach (Years y in year2)
{
Console.WriteLine("Year: {0}", y.gYear);
foreach (Classes c in class2)
{
if (y.gYear == c.gYear)
{
Console.WriteLine("Class: {0}", c.gCourse);
foreach (Grades g in grade2)
{
if (g.gCourse == c.gCourse )
{
//Console.WriteLine("Student: {0}", g.sID);
foreach (Students s in stud2)
{
if (s.sID == g.sID)
{
Console.WriteLine("{0} {1} | Grade: {2}", s.sFirst, s.sLast, g.gGrade);
}
}
}
}
}
}
Console.WriteLine("");
}
另外,我想删除重复的类。假设第一年,也就是 2015 年,有 2 名学生选修同一门课程。因此,在输出中,它两次说明该课程,并且在每门课程下都是两个学生。
解决方案
您没有显示您的数据类,但几乎可以肯定的是,您错过了年级到年级的连接条件(即年级是年级、课程和学生之间相交的“事实”字段值)。
如果没有这个额外的连接条件,您将在课程举办的每一年“重复”学生成绩的笛卡尔积,唯一的限制是学生必须至少完成一次该课程,这就是您看到的原因每年重复相同课程的相同学生。
你的Grades
班级应该是这样的:
class Grades
{
public string gCourse {get; set; }
public int sId {get; set; }
public int gGrade {get; set; }
public int gYear {get; set; } // <<< Use this
}
您可以通过添加额外的连接条件来解决不需要的重复,如下所示:
// ... Outer loops
foreach (Grades g in grade2)
{
if (g.gCourse == c.gCourse && g.gYear == y.gYear) // << Additional Join condition
{
foreach (Students s in stud2)
{
if (s.sId == g.sId)
{
Console.WriteLine("{0} {1} | Grade: {2}", s.sFirst, s.sLast, g.gGrade);
}
}
}
}
推荐阅读
- postgresql - How to reconnect to same postgres database on Docker
- model-view-controller - 如何保护从 MVC 数据库中填充 Ajax 的 html 选择对象中的数据
- c - 带有 strtok 警告的 Castin
- sql - SQL statement to return the Min and Max amount of stock per article for a given Month
- c# - DinkToPdf 显示在每一页上
- linux - 两个MPI计算节点无法完成一次TCP连接,防火墙导致
- python - 调试螺母和螺栓问题python代码
- flutter - FutureBuilder 作为 AlertDialog 的子项不起作用
- javascript - Kafka js 快速示例错误
- excel - 使用 Pentaho 报表设计器的交叉表功能导出到 excel 显示空报表