2016-02-02 51 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的回答标记为答案。他急需点数。 –