繁体   English   中英

从一个条件复制列表中的项目

[英]copy items from a list on one condition

我试图在一种情况下将项目从列表复制到另一个列表。 我有三个清单。 第一个列表包含例如10个点列表,第二个列表包含每个列表的总距离(成本或适用性)(10个列表-> 10个总距离)。

这是一张图片:第一个列表包含10个列表(每个列表包含点)-第二个列表“健身” 在此处输入图片说明 第三个列表为空,应在一种情况下填充项目。 首先,我将第二个列表中的所有值相加。 上面数字的示例:totalFitness = 4847 + 5153 + 5577 + 5324 ...

将第一个列表中的点列表添加到第三个列表中的条件是:例如---------->(Fitness [0] / totalFitness)<=比率。

但这不起作用,在这里您可以看到我尝试的代码:

class  RunGA 
{
  public static List<List<Point3d>> createGenerations(List<List<Point3d>> firstGeneration, List<int> firstFitness, int generationSize)
  {
   List<List<Point3d>> currentGeneration = new List<List<Point3d>>();

   int totalFitness;
   int actualFitness;
   totalFitness = firstFitness[0] + firstFitness[1];
   double ratio = 1 / 10;

   for(int k = 2; k < firstFitness.Count; k++)
   {
    actualFitness = firstFitness[k];
    totalFitness += actualFitness;
   }

   for(int i = 0; i < firstFitness.Count; i++)
   {
    double selected = firstFitness[i] / totalFitness;
    if(selected < ratio)
    {
     currentGeneration.Add(firstGeneration[i]);
    }
   }
   return currentGeneration;
  }
}

第三个列表仍然为空。 如果我将条件更改为: if(selected <= ratio)则将第一个列表中的整个点列表复制到第三个列表中。 但是,我要复制的是:具有“最佳”适用性的要点列表。

我做错了什么事? 我完全不知道,我已经尝试了一些更改,但是仍然无法正常工作。 如果您可以认为我是初学者,我将不胜感激。

我找到了解决该问题的另一种方法。

我仍然有这些数据:

清单1:

  1. ListOfPoints = a
  2. ListOfPoints = b
  3. ListOfPoints = c
  4. ListOfPoints = d

清单2:

  1. 健身度
  2. b的适合度
  3. 健身度
  4. d的适应度

我要实现的目标是:选择具有最佳适应性的ListOfPoints并将它们放入List3。 将所有其余的ListOfPoints放入另一个List4中。

这是我想到的解决方案:将List1作为键,将List2作为值放入字典中,并通过LINQ对其进行排序。 现在将已排序的键转移到List3中。 使用for循环,将已排序列表的前半部分放入List4,将后半部分放入List5。

这是我的代码:

List<List<Point3d>> currentGeneration = handoverPopulation.ToList();
List<double> currentFitness = handoverFitness.ToList();
Dictionary<List<Point3d>, double> dict = new Dictionary<List<Point3d>, double>();
foreach(List<Point3d> key in currentGeneration)
{
  foreach(double valuee in currentFitness)
  {
    if(!dict.ContainsKey(key))
    {
      if(!dict.ContainsValue(valuee))
      {dict.Add(key, valuee);}
    }
  }
}
var item = from pair in dict orderby pair.Value ascending select pair;
List<List<Point3d>> currentGenerationSorted = new List<List<Point3d>>();
currentGenerationSorted = item.Select(kvp => kvp.Key).ToList();

List<List<Point3d>> newGeneration = new List<List<Point3d>>();
List<List<Point3d>> newGenerationExtra = new List<List<Point3d>>();

int p = currentGenerationSorted.Count / 2;
for(int i = 0; i < p; i++)
{newGeneration.Add(currentGenerationSorted[i]);}

for(int j = p; j < currentGenerationSorted.Count; j++)
{newGenerationExtra.Add(currentGenerationSorted[j]);}

希望这可以帮助面临相同问题的其他人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM