我的列表中的所有项目都会更新,但我只想添加一个项目



在这个脚本中,我用自己的脚本对列表进行排序,并希望将列表的所有状态添加到位置的列表中

这是我在列表中添加项目的地方:

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。因此,您可以在固定输入上进行测试。

相关内容

最新更新