2016-08-27 27 views
-1

我有兩個類。第一類稱爲人,第二類是具有列表的程序類。如果他的某個屬性發生了變化,我可以使用什麼方法查找並顯示該人員?如何在一個列表中顯示與另一個列表相比所做的更改

人民類:

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; 
     } 
    } 
} 
+1

從何時增加/更改/更改?這些信息保存在哪裏,或者你是否在談論本次會議期間所做的更改?如果您想列出更改,則需要以某種方式跟蹤它們。 –

+0

爲了清楚起見,它看起來像要檢測至少3種更改:1.新記錄,2.已刪除記錄,3.有更改的記錄。但關於1和2--這些可以簡單地通過ID來檢測,對吧?但是,對於3來說,它需要通過查看屬性來檢測。你想比較所有的屬性,還是隻是studentYear和studentRank?即名字可能會改變? – DWright

+0

Right - 1)和2)可以通過Union,Intersect,Join(http://www.dotnetperls.com/union)處理3)需要使用db或文件或某些持久性存儲進行跟蹤。實際上,1)和2)如果要在當前會話之後進行跟蹤,則需要存儲(要麼保存舊的學生名單,要麼跟蹤添加/刪除) –

回答

0

首先,你需要通過 「ID」 到每個列表進行排序,以避免意外。

然後,您需要遍歷列表,同時遞增兩個索引變量,每個列表一個。我們稱它們爲iOldiNew

  • 如果StudentsOld[iOld].Id < StudentsNew[iNew].Id那麼你必須在StudentsNew刪除。

  • 如果StudentsOld[iOld].Id > StudentsNew[iNew].Id那麼你有一個插入StudentsNew

  • 並且如果StudentsOld[iOld].Id == StudentsNew[iNew].Id那麼您正在查看兩個列表中的同一行,因此您需要檢查其中的任何內容是否已更改。

當您完成通過列表中的一個循環,不要忘記考慮其他的列表,插入或刪除所有剩餘行,這取決於其他列表是否是「老」或「新「列表。

+0

是的,我知道我必須首先對它們進行排序並循環播放它們,但在那之後,如何顯示已添加,刪除和編輯的學生。 –

+0

我剛剛告訴過你該怎麼做,現在你問我該怎麼做。如果您無法將英文文本轉換爲代碼,我無法幫助您。 Stackoverflow並不是要爲你完成作業。 –

0

您指定學生是不可變的,所以您應該從中刪除,以便它們不能更改。在此之後,我會建議您使用HashSet而不是列表,因爲這會使比較更快。

爲了使用HashSet的,你需要重寫GetHashCode方法爲學生應該從所有學生的值(ID,名字,姓氏,年份,等級)

從這裏來計算,這只是一個遍歷集合的問題。

從老學生的集合,如果學生存在於新的集合,然後他們被刪除。

從新生的集合中,如果學生不存在於舊集合中,則添加它們。

不知道學生如何改變,因爲他們是不可改變的,所以這是不可能的。

相關問題