复制大型列表并防止改变原来的
本文关键字:改变 原来 大型 列表 复制 | 更新日期: 2023-09-27 18:06:22
我有一个列表,有11k项,列表在初始化时填充,我需要传递一个函数的副本,该函数将修改传递的列表项而不修改原始副本,
到目前为止,我发现的唯一方法是将列表逐项复制到另一个列表,每次创建新的custom_class(),这消耗了~50ms,这在我的情况下是不可接受的。
目前我尝试的是:
AnotherOriginal = Original.AsReadOnly().tolist();
copy = original.tolist();
修改copy[0].testvariable
将同时修改:AnotherOriginal和original。和
我也试过
ImmutableList test = original.ToImmutableList()
修改test[0].testvariable
也会反映到原来!
让一个副本传递给函数,而不必一个一个地添加项到另一个列表的最快方法是什么?防止对原始列表进行修改。
当前深度复制代码(我需要增强):
List<FP_Point> particles = new List<FP_Point>();
foreach (FP_Point p in originalParticles)
{
particles.Add(new FP_Point() { ID = p.ID, ZonesIDs = p.ZonesIDs, Location = new Point(p.Location.X, p.Location.Y), Readings = p.GetReadings() });
}
return particles;
自定义类:
public class FP_Point
{
public int ID { get; set; }
public Point Location { get; set; }
public List<Reading> Readings { get; set; }
public double Weight, Distance;
public List<int> ZonesIDs;
public double PreviousDistance;
}
除了克隆选择并假设GetReadings()
函数返回List<Readings>
的新实例外,还可以使用以下方法:
var particles = originalParticles.Select(p => new FP_Point()
{
ID = p.ID,
ZonesIDs = p.ZonesIDs != null ? p.ZonesIDs.ToList() : null,
Location = new Point(p.Location.X, p.Location.Y),
Readings = p.GetReadings(),
Distance = p.Distance,
PreviousDistance = p.PreviousDistance,
Weight = p.Weight
}).ToList();