2016-02-02 91 views
0

我在這裏看到的大多數答案大多覆蓋了列表比較時布爾真/假的問題。我感興趣的是比較兩個列表並查看兩個列表之間的值的變化。c#:比較兩個列表並記錄值的變化

換句話說,我有列表和列表;他們都有兩個條目 - 名字和成績:在名單a中,第一個條目是「湯姆」,他的成績是「100」,在名單b中,第一名也是「湯姆」,但他的成績是現在「89」。

我可憐的企圖做到這一點:

private static void DataFromResults(List<data> aList, List<data> bList) 
{ 
    using (var reader = newStreamReader(File.OpenRead(@"c:\temp\data.csv"))) 
    {  
     while(!reader.EndOfStream) 
     { 
      var line = reader.ReadLine(); 
      var values = line.Split(','); 
      string name = new name(values[0]).ToString(); 

      string grade = new grade(values[1]).ToString(); 
      foreach (var data in aList) 
      { 
       for (int i = 0; i < aList.Count; i++) 
       { 
        if (aList[i] != bList[i]) {//???}... 
+0

所以,你首先需要通過名稱加入,或者你可以假設列表是在相同的順序嗎?你想要什麼結果?目前還沒有足夠的信息可以幫助我們... –

+0

我假定列表的順序相同,是的 – mrsphd

+0

結果必須是Console.Writeline的輸出,表示Tom的結果下降了11% – mrsphd

回答

1

這聽起來像你只是想是這樣的:

var differences = aList.Zip(bList, 
    (a, b) => new { a.Name, Difference = a.Grade - b.Grade }); 

foreach (var result in differences) 
{ 
    if (result.Difference != 0) 
    { 
     Console.WriteLine("Change for {0}: {1}", result.Name, result.Difference); 
    } 
} 

(如果你想它的比例,而不是絕對的,你可能想保留初始值以及...)

Zip方法基本上匹配兩個序列中的元素(按順序)並將每個對投影到另一個值中,accordi您提供的投影。

+0

謝謝喬恩爲你幫幫我! – mrsphd

+0

@mrsphd - 請將Jon的回答標記爲答案。他急需點數。 –