0

这里是 C# 初学者,使用 Grasshopper for Rhino,所以有些对象类型有点奇怪。

我目前正在尝试在列表中找到与给定点最近的 n 个点。我可以使用以下函数找到最近点,但无法调整它以检索多个最近点。

public Vec3D ClosestPoint(Vec3D a, List<Vec3D>points){
  List<float> distanceList = new List<float>();
  for (int i = 0; i < points.Count(); i++){
    float distanceFloat = a.distanceTo(points[i]);
    distanceList.Add(distanceFloat);
  }
  int smallestIndex = distanceList.IndexOf(distanceList.Min());
  return points[smallestIndex];
}

我将如何为以下函数调整此代码,其中 n 是要找到多少个最近点?

public Vec3D ClosestPoints(Vec3D a, List<Vec3D>points, int n){

  } 
4

1 回答 1

0

您可以使用 Linq 来获得该结果:

public IEnumerable<Vec3D> ClosestPoints(Vec3D a, List<Vec3D>points, int n) =>

  points.Select(point => new 
  { 
     point = point, 
     distance = a.distanceTo(point) 
  }).
  OrderBy(x = x.distance).
  Take(n).
  Select(x => x.point);

请注意,在这种情况下,另一种方法变为:

public Vec3D ClosestPoint(Vec3D a, List<Vec3D>points) =>
  ClosestPoints(a, points, 1).FirstOrDefault();
于 2017-08-15T14:22:19.050 回答