1

我需要字典的替代品,因为需要重复。原因是:我需要寻找最佳路线。为此,我正在创建一个有 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);
   }
  }
 }
}
4

2 回答 2

4

我需要字典的替代品,因为需要重复

请参阅查找。这本质上是一个允许重复的字典。

从文档中:

表示一组键,每个键映射到一个或多个值。

不同之处在于 Dictionary 将键映射到单个值,而 Lookup 将键映射到值的集合。

您可以通过对实现 IEnumerable 的对象调用 ToLookup 来创建 Lookup 的实例。

于 2016-10-07T16:31:17.423 回答
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));

耶耶开心:)

于 2016-10-08T19:14:46.673 回答