【发布时间】:2017-10-14 03:52:21
【问题描述】:
对于我的课堂作业,我需要将旧的学生列表与新列表进行比较,并将新学生、删除的学生和更改的学生添加到单独的列表中。教师指定使用嵌套的 foreach 循环而不是 LINQ,但我的问题是一旦旧学生列表匹配新学生中的条目并移动到旧列表中的下一个学生,就会打破循环。
我的代码现在通过嵌套的 foreach 运行,将条目与旧列表中的第一个条目进行比较,结果出现没有 ID 匹配的结果,因此它将它们放入已删除的列表中并结束循环而不移动到旧列表中的下一个学生。
public static void CompareStudents(List<Student> oldList, List<Student> newList)
{
foreach (Student o in oldList)
{
foreach (Student n in newList)
{
if (FindStudent(o.ID, n.ID))
{
if (CheckChanges(o, n))
{
changed.Add(n);
break;
}
}
else
{
removed.Add(o);
break;
}
}
}
}
private static bool FindStudent(string oldID, string newID)
{
if (newID.Equals(oldID))
{
return true;
}
else
{
return false;
}
}
public static bool CheckChanges(Student oldStu, Student newStu)
{
if (oldStu.FirstName.Equals(newStu.FirstName) &&
oldStu.LastName.Equals(newStu.LastName) &&
oldStu.StudentYear.Equals(newStu.StudentYear) &&
oldStu.StudentRank.Equals(newStu.StudentRank))
{
return false;
}
else
{
return true;
}
}
【问题讨论】:
-
啊,你的问题是什么?你只是想让我们为你完成你的作业吗?
-
删除列表在哪里声明?您的要求不明确。
-
FindStudents()方法没用(可以换成简单比较o.ID == n.ID)。但算法也不是最好的。想象一下,你的左手和右手都有硬币。与其一直保留它们并相互比较,不如尝试找到相同的硬币并从未来的搜索中删除它们。剩下的 - 是不匹配的。 -
我投票决定将此问题作为离题结束,因为此问题要求提供一个特定作业解决方案,该解决方案放弃任何其他同样有效的解决方案(例如 LINQ)。