在更改列表之前使用 Linq ConvertAll 创建列表的备份
Using Linq ConvertAll to create a backup of a list before altering the list
我正在处理一个项目,其中有一个对象列表,其中有一个嵌套列表,我想在更新原始列表之前对其进行备份。
我很接近,但我找不到正确的语法,所以我希望你能在这里帮助我。
这是原文class:
public class TeamClass
{
public string Country { get; set; }
public string CountryCode { get; set; }
public List<double> Points { get; set; }
}
List<TeamClass> originalList = new List<TeamClass>();
就在更新 OriginalList 上的点之前,我想创建 OriginalList 的深层副本,这样我就可以 "undo" 进行更改。
目前我正在使用下面的代码:
var backupList = Simulation.ConvertAll(x => new TeamClass
{
Country = x.Country,
CountryCode = x.CountryCode,
Points = new List<double>(x.Points.ConvertAll(p => new double()))
})
.OrderByDescending(o => o.Points.Sum())
.ToList();
尽管此代码创建了原始列表的深层副本,但它会将列表 Points 中的所有点替换为 0(因为新的 double())
但是使用
Points = x.Points
给了我正确的分数,但它们会在原始列表更新时更新。
我想我必须做类似
的事情
Points = new List<double>().AddRange(x.Points)
但是我找不到正确的语法。
感谢任何帮助。
回答您评论中的其他问题。可以用这样的东西来完成。
int N = 4; // Number of desired elements with value
var backupList = Simulation.ConvertAll(x => new TeamClass
{
Country = x.Country,
CountryCode = x.CountryCode,
Points = new List<double>(x.Points.Take(N).Concat(x.Points.Skip(N).ToList().ConvertAll(p => new double())));
})
.OrderByDescending(o => o.Points.Sum())
.ToList();
由于 double 不是可为空的数据类型,因此 N 之后的所有值都将转换为 0。
我正在处理一个项目,其中有一个对象列表,其中有一个嵌套列表,我想在更新原始列表之前对其进行备份。
我很接近,但我找不到正确的语法,所以我希望你能在这里帮助我。
这是原文class:
public class TeamClass
{
public string Country { get; set; }
public string CountryCode { get; set; }
public List<double> Points { get; set; }
}
List<TeamClass> originalList = new List<TeamClass>();
就在更新 OriginalList 上的点之前,我想创建 OriginalList 的深层副本,这样我就可以 "undo" 进行更改。
目前我正在使用下面的代码:
var backupList = Simulation.ConvertAll(x => new TeamClass
{
Country = x.Country,
CountryCode = x.CountryCode,
Points = new List<double>(x.Points.ConvertAll(p => new double()))
})
.OrderByDescending(o => o.Points.Sum())
.ToList();
尽管此代码创建了原始列表的深层副本,但它会将列表 Points 中的所有点替换为 0(因为新的 double())
但是使用
Points = x.Points
给了我正确的分数,但它们会在原始列表更新时更新。
我想我必须做类似
的事情Points = new List<double>().AddRange(x.Points)
但是我找不到正确的语法。
感谢任何帮助。
回答您评论中的其他问题。可以用这样的东西来完成。
int N = 4; // Number of desired elements with value
var backupList = Simulation.ConvertAll(x => new TeamClass
{
Country = x.Country,
CountryCode = x.CountryCode,
Points = new List<double>(x.Points.Take(N).Concat(x.Points.Skip(N).ToList().ConvertAll(p => new double())));
})
.OrderByDescending(o => o.Points.Sum())
.ToList();
由于 double 不是可为空的数据类型,因此 N 之后的所有值都将转换为 0。