我需要字典的备用,因为需要重复。原因是: 我需要寻找最佳路线。为此,我创建了一个拥有20个人的人口。每个人都有自己的路线,每条路线都是健身计算的。为了能够通过健身对路线进行排序,我正在创建一本字典。现在,我正在迭代几代,同时对字典进行排序,并在每次迭代时为其添加新路由。但是字典正在删除重复项,因为代码可能会多次抛出最佳路由,所以不应该这样做。
我已经阅读了一些关于查找和链接列表的内容,但实际上并不了解它。或者也许是一个元组?谁知道哪些可能会有所帮助?
这是我的代码:好吧,它不是只显示字典的漏洞代码,以避免误解。
List<List<Point3d>> currentGeneration = new List<List<Point3d>>(cGP.Count);
cGP.ForEach((item) => {currentGeneration.Add(new List<Point3d>(item));});
List<double> currentFitness = cGF.ToList();
Dictionary<List<Point3d>, double> dictionary = new Dictionary<List<Point3d>, double>();
foreach(List<Point3d> individual in currentGeneration)
{
foreach(double individualsFitness in currentFitness)
{
if(!dictionary.ContainsKey(individual))
{
if(!dictionary.ContainsValue(individualsFitness))
{
dictionary.Add(individual, individualsFitness);
}
}
}
}
答案 0 :(得分:4)
我需要字典的备用字符,因为需要重复
见Lookup。这本质上是一个允许重复的字典。
来自文档:
表示每个映射到一个或多个值的键集合。
区别在于Dictionary将键映射到单个值,而Lookup将键映射到值集合。
您可以通过在实现IEnumerable的对象上调用ToLookup来创建Lookup实例。
答案 1 :(得分:0)
好的,我已经找到了我要搜索的内容。
List<KeyValuePair>
不会删除重复项,并且可以按值或按键对其进行排序,这两种情况都是可能的。
这是我的代码,适合像我这样的编程新手:
List<List<Point3d>> handoverPopulation = createPopulation(pts, p);
List<double> handoverFitness = calculateFitness(handoverPopulation, p0);
List<KeyValuePair<List<Point3d>, double>> list = new List<KeyValuePair<List<Point3d>, double>>();
for(int i = 0; i < handoverFitness.Count; i++)
{
list.Add(new KeyValuePair<List<Point3d>, double>(handoverPopulation[i], handoverFitness[i]));
}
list.Sort((x, y) => x.Value.CompareTo(y.Value));
Yeeyy高兴:)