Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字典元素引用_C#_.net_Visual Studio - Fatal编程技术网

C# 字典元素引用

C# 字典元素引用,c#,.net,visual-studio,C#,.net,Visual Studio,我在使用字典,最主要的问题是它们相互引用。我需要创建一个深层克隆(命名为smth) 我使用人口作为初始字典,在这里存储图形,然后我需要从人口中提取元素,更改它们,写入childPopulation,然后进行一些计算,更改后的元素变成分数。最后,我需要合并人口和分数字典 问题是,当我改变人口中的元素时,它们会因为原因而改变。我需要一些如何创建一个人口的副本,而我将不会引用初始值 population = new Dictionary<AdjacencyGraph<Fig

我在使用字典,最主要的问题是它们相互引用。我需要创建一个深层克隆(命名为smth)

我使用人口作为初始字典,在这里存储图形,然后我需要从人口中提取元素,更改它们,写入childPopulation,然后进行一些计算,更改后的元素变成分数。最后,我需要合并人口和分数字典

问题是,当我改变人口中的元素时,它们会因为原因而改变。我需要一些如何创建一个人口的副本,而我将不会引用初始值

        population = new Dictionary<AdjacencyGraph<Figure, TaggedEdge<Figure, double>>, double>();
        addElement(p1, initialGraph);
        Run(initialGraph, p1);
        double scoreBest = RMSECalc();
        population.Add(initialGraph, scoreBest);
        while (scoreBest >= 1.0)
        {
            childPopulation = new List<AdjacencyGraph<Figure, TaggedEdge<Figure, double>>>();
            var parentList = new Dictionary<AdjacencyGraph<Figure, TaggedEdge<Figure, double>>, double>();

            foreach (var parent in population)
            {
                childPopulation.Add(Mutate(parent.Key));
            }
            GetBestSolution(childPopulation);
            scores = scores.OrderBy(x => x.Value).ToDictionary(x => x.Key, x => x.Value);
            if (scores.First().Value < scoreBest)
                scoreBest = scores.First().Value;
            scores.ToList().ForEach(x => population.Add(x.Key, x.Value));
            population.Take(50);
            scores = new Dictionary<AdjacencyGraph<Figure, TaggedEdge<Figure, double>>, double>();
            childPopulation = new List<AdjacencyGraph<Figure, TaggedEdge<Figure, double>>>();
        }
population=newdictionary();
加法器(p1,初始图形);
运行(初始化图,p1);
double scoreBest=RMSECalc();
人口。添加(初始值图表,最佳分数);
而(最佳得分>=1.0)
{
childPopulation=新列表();
var parentList=新字典();
foreach(总体中的父变量)
{
Add(Mutate(parent.Key));
}
GetBestSolution(儿童人口);
分数=分数.OrderBy(x=>x.Value).ToDictionary(x=>x.Key,x=>x.Value);
if(scores.First().Valuepopulation.Add(x.Key,x.Value));
人口:以50人为例;
分数=新字典();
childPopulation=新列表();
}

您是否考虑过使用结构而不是引用类型?执行深度克隆的一个选项是执行二进制序列化和反序列化。否则,您必须编写自己的代码来进行克隆。问题是我不能使用序列化,因为邻接图没有提到可序列化。而且我也无法修复源代码。同我不能使用接口IClonable一样