如何显示一个列表中的更改与另一个列表中的更改

时间:2016-08-27 22:30:26

标签: c# list collections comparison

我有两节课。第一个类称为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;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

首先,您需要按照&#34; Id&#34;对每个列表进行排序,以避免出现意外。

然后,您需要遍历列表,同时递增两个索引变量,每个列表一个。我们称他们为iOldiNew

  • 如果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)计算

从这里开始,只需迭代这些集。

从一组旧学生中,如果学生在新学生中存在,那么他们就被删除了。

从新学生组中,如果学生不在旧学生中,那么他们就会被添加。

不确定学生如何因为不可变而改变,所以这是不可能的。