在一个集群项目上工作时,我遇到了这个问题,并且正在尝试找出比我想出的更好的解决方案。
问题:给定一个点列表List Points在R^n中的点(您可以将每个点视为维度n的双数组),一个double minDistance和一个距离Func dist,请编写一个LINQ表达式,对于每个点,返回在列表中比minDistance更接近他的其他点集合,根据dist计算。
我的解决方案如下:
问题:给定一个点列表List Points在R^n中的点(您可以将每个点视为维度n的双数组),一个double minDistance和一个距离Func dist,请编写一个LINQ表达式,对于每个点,返回在列表中比minDistance更接近他的其他点集合,根据dist计算。
我的解决方案如下:
var lst = Points.Select(
x => Points.Where(z => dist(x, z) < minDistance)
.ToList() )
.ToList();
因为要计算每个距离两次,使用LINQ可能不是最佳选择。
这个问题没有太多实际用途。
即使我的代码看起来很糟糕,但它也能工作。
我有以下问题:
- 是否可以将我的代码转换为查询表达式?如果可以,如何转换?
- 是否有更好的使用点表示法解决此问题的方法?
Points.Select(y => y)
相对于Points
有什么好处? - Jon Skeet