我有一个班级WorldObject
。在本课程中,我保存了一个职位。
现在我有WorldObjects
的列表。我想找到一个元素,它与给定点的距离最小。
abstract class WorldObject
{
private Vector2D _position;
public Vector2D Position
{
get { return _position; }
set { _position = value; }
}
//...
}
private List<WorldObject> worldObjects;
internal WorldObject GetNearestObject(Vector2D pos)
{
return worldObjects.Min();
}
通常情况下,我可以通过在IComparable
中实施WorldObject
来搜索最低要求。但现在我需要这一点作为关系。我怎么能这样做?
答案 0 :(得分:2)
您可以使用.Aggregate
:
return worldObjects
.Aggregate((result, current) => (current.Position.GetDistance(pos)
< result.Position.GetDistance(pos))
? current : result);
假设 .GetDistance
用于计算Vector2D
个对象之间的距离。
另一种可能性是使用morelinq的.MinBy
:
return worldObjects.MinBy(wo => wo.Position.GetDistance(pos));
另一种可能性,然而它不必要地对物体进行分类:
return worldObjects.OrderBy(wo => wo.Position.GetDistance(pos)).First();
答案 1 :(得分:1)
假设您有一定距离获得两个位置之间的距离:
internal WorldObject GetNearestObject(Vector2D pos)
{
var minDistance = worldObjects.Min(wo => wo.Position.GetDistance(pos));
return worldObjects.First(wo => wo.Position.GetDistance(pos) == minDistance);
}
答案 2 :(得分:1)
internal WorldObject GetNearestObject(Vector2D pos)
{
return worldObjects.OrderBy(wo => wo.Position.GetDistance(pos)).First();
}