获取与点相关的最小距离的列表元素

时间:2014-02-08 13:50:45

标签: c# .net

我有一个班级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来搜索最低要求。但现在我需要这一点作为关系。我怎么能这样做?

3 个答案:

答案 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();
}