我有两节课。第一个类称为people,第二个类是具有列表的程序类。如果他的某个属性被更改,我可以用什么方法查找并显示该人?
人民班:
public class People
{
public string ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public People(string idNumber, string firstName, string lastName)
{
ID = idNumber;
FirstName = firstName;
LastName = lastName;
}
public override string ToString()
{
return ID + " " + FirstName + " " + LastName;
}
}
}
程序类:
class Program
{
static void Main(string[] args)
{
//Show the person since his id is changed
}
public static List<People> Old()
{
List<People> people = new List<People>();
people.Add(new People("2", "John", "Sam"));
return people;
}
public static List<People> New()
{
List<People> people = new List<People>();
people.Add(new People("5", "John", "Sam"));
return people;
}
}
}
答案 0 :(得分:0)
首先,您需要按照&#34; Id&#34;对每个列表进行排序,以避免出现意外。
然后,您需要遍历列表,同时递增两个索引变量,每个列表一个。我们称他们为iOld
和iNew
。
如果StudentsOld[iOld].Id < StudentsNew[iNew].Id
您在StudentsNew
中删除了。
如果StudentsOld[iOld].Id > StudentsNew[iNew].Id
,则您在StudentsNew
中插入了StudentsOld[iOld].Id == StudentsNew[iNew].Id
。
如果 test = mtdev,/dev/input/event3
,那么您正在查看两个列表中的同一行,因此您需要检查其内容是否已更改。
当你完成循环遍历其中一个列表时,不要忘记将另一个列表中的所有剩余行视为插入或删除,这取决于另一个列表是否为&#34; Old&#34;或者&#34; New&#34;列表。
答案 1 :(得分:0)
您指定Student是不可变的,因此您应该从中删除set;
,以便不能更改它们。在此之后,我建议您使用HashSet而不是列表,因为这样可以更快地进行比较。
为了使用HashSet,您需要覆盖学生的GetHashCode方法,该方法应根据学生的所有值(id,firstname,lastname,year,rank)计算
从这里开始,只需迭代这些集。
从一组旧学生中,如果学生在新学生中存在,那么他们就被删除了。
从新学生组中,如果学生不在旧学生中,那么他们就会被添加。
不确定学生如何因为不可变而改变,所以这是不可能的。