c# - 我列表中的所有项目都会更新,但我只想添加一个项目
问题描述
在此脚本中,我使用自己的脚本对列表进行排序,并且我想将列表的所有状态添加到位置列表中
这是我在列表中添加我的项目的地方:
private List<int> values;
public List<int> Values { get => values; private set => values = value; }
static Position p;
public List<Position> _lp;
public Insertiontri()
{
_lp = new List<Position>();
}
public override void Sort()
{
int en_cours;
int i, j;
for (i = 0; i < 20; i++)
{
en_cours = Values[i];
for (j = i; j > 0 && Values[j - 1] > en_cours; j--)
{
Values[j] = Values[j - 1];
}
Values[j] = en_cours;
addValuesToPos();
}
}
private void addValuesToPos()
{
List<int> ints = Values;
p = new Position(ints);
_lp.Add(p);
}
这是我的课
public class Position
{
private List<int> _position;
public List<int> position { get => _position; set => _position = value; }
public Position(List<int> p)
{
position = p;
}
}
并使用此功能生成值
public override void Random()
{
Values = Enumerable.Range(1, 20) // la plage de nombres dans ta collection,
.OrderBy(x => Guid.NewGuid()) // ordonné par rapport à un guid,
.ToList();
_lp.Add(new Position(Values));
}
解决方案
您List<int>
对所有职位使用相同的。
为了简化和说明问题,我们需要进行一些清理。我们将删除 Position ,它只是一个包装器。并List<int>
删除不必要的属性。
我们有一个类List<int>
在每个步骤或排序过程中存储一个和该列表的快照列表。
public class SortingAlgo_StepByStepDemo {
public List<int> Source {get;set;}
public List<List<int>> Steps {get;set;}
...
}
排序算法和实现保持不变。我们只需要改变我们存储“步骤”的图片/快照的方式。
public void SaveStep()
{
// It's the same.
// Steps.Add(Source.ToList());
Steps.Add(new List<int>(Source));
}
如果我们Steps.Add(Source)
像你一样。它将保存的不是图片,而是实际列表源的参考。Steps 的每个元素都指向同一个东西。
现场演示:https ://dotnetfiddle.net/9sbezB
我添加了一个带List<int> Source
. 因此,您可以在固定输入上进行测试。
推荐阅读
- regex - 如何编写正则表达式以从此表达式的第三行获取输出
- r - ggplot2直方图颜色不渗透
- sql - 如何在动态列上执行多个透视
- laravel - 请求在下拉选择中返回 NULL
- batch-file - 试图杀死进程 - 不成功
- postgresql - 为 pgbackrest wal 归档配置不同的 repo 路径
- android - 如何知道在项目中使用 fab 按钮的位置(活动和片段和 xml)?
- sql - MS ACCESS - 查询通过查询工作,并且 VBA 中存在错误。如何修改查询?
- daml - 从 DA.Time 存储和检索微秒
- android - 用于 Android 图像处理的 OpenGL ES vs OpenCL vs RenderScript