在这个脚本中,我用自己的脚本对列表进行排序,并希望将列表的所有状态添加到位置的列表中
这是我在列表中添加项目的地方:
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>
。
为了简化和说明这个问题,我们需要做一些清理。我们将删除只是List<int>
包装的Position。并删除不必要的属性。
我们有一个类,在每个步骤或排序过程中存储一个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
的Ctor。因此,您可以在固定输入上进行测试。