查找两个基因列表之间的差异

本文关键字:之间 列表 两个 查找 | 更新日期: 2023-09-27 18:11:37

Hai我的问题是我有两个通用对象列表

 List<plan> previousYear;  
 List<plan> Nextyear;  

我需要用一种自定义的方式得到它们之间的区别

例如

:

public class plan{
         int budget;
         int expense;
         int savings 
}
   List<plan> previousYear = new List<plan>() { new plan ( 100, 200, 300 ), 
                            new plan( 400, 500, 600 ) };  
   List<plan> nextYear = new List<plan>() { new plan ( 200, 200, 300 ), 
                         new plan ( 400, 600, 700 ) };  

应用差异后,我需要得到像

这样的结果
  1. 第一个对象第一个属性更改为200

  2. 第二个对象的第二个属性更改为600

  3. 第二个对象的第三属性更改为700

我想以列表的形式得到上面的结果。
我不知道用来解决这个问题的数据结构和方法(比如linq)

查找两个基因列表之间的差异

您可以使用Zip方法:

var result = previousYear.Zip(nextYear,
            (p, n) =>
                new plan(Math.Max(p.budget, n.budget), 
                    Math.Max(p.expense, n.expense),
                    Math.Max(p.savings, n.savings)))
                    .ToList();

首先可以为您的自定义类Plan重载-操作符,如下所示:

public class Plan
{
    public int Budget { get; set; }
    public int Expense{ get; set; }
    public int Savings { get; set; }
    public Plan(int budget, int expense, int savings)
    {
        Budget = budget;
        Expense = expense;
        Savings = savings;
    }
    public static Plan operator -(Plan p1, Plan p2)
    {
        return new Plan(p1.Budget - p2.Budget, 
                        p1.Expense - p2.Expense, 
                        p1.Savings - p2.Savings);
    }
}

然后你可以使用LINQ的Zip方法来得到你想要的,如下所示:

var result = previousYear.Zip(nextYear, (p,n) => p-n);

有关Zip方法的更多信息,请参阅此处