首页 > 解决方案 > 我列表中的所有项目都会更新,但我只想添加一个项目

问题描述

在此脚本中,我使用自己的脚本对列表进行排序,并且我想将列表的所有状态添加到位置列表中

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

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));
        }

标签: c#

解决方案


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


推荐阅读