C# 获取相对于点的最小距离的列表元素

C# 获取相对于点的最小距离的列表元素,c#,.net,C#,.net,我有一个类WorldObject。在这门课上我保留了一个职位 现在我有了一个世界对象的列表。我想找到一个元素,它与给定点的距离最小 abstract class WorldObject { private Vector2D _position; public Vector2D Position { get { return _position; } set { _position = value; } } //... }

我有一个类
WorldObject
。在这门课上我保留了一个职位

现在我有了一个
世界对象的列表
。我想找到一个元素,它与给定点的距离最小

abstract class WorldObject
{
    private Vector2D _position;

    public Vector2D Position
    {
        get { return _position; }
        set { _position = value; }
    }

    //...
}

私有列表世界对象;
内部WorldObject GetNeareSObject(矢量2D位置)
{
返回worldObjects.Min();
}

通常,我可以通过在
WorldObject
中实现
IComparable
来搜索最小值。但现在我需要这一点作为关系。我怎样才能做到这一点?

假设你有办法获得两个位置之间的距离:

internal WorldObject GetNearestObject(Vector2D pos)
{
    var minDistance = worldObjects.Min(wo => wo.Position.GetDistance(pos));
    return worldObjects.First(wo => wo.Position.GetDistance(pos) == minDistance);
}

假设你有办法得到两个位置之间的距离:

internal WorldObject GetNearestObject(Vector2D pos)
{
    var minDistance = worldObjects.Min(wo => wo.Position.GetDistance(pos));
    return worldObjects.First(wo => wo.Position.GetDistance(pos) == minDistance);
}
您可以为此使用:

return worldObjects
    .Aggregate((result, current) => (current.Position.GetDistance(pos)
                                     < result.Position.GetDistance(pos))
                                    ? current : result);
然而,另一种可能性是对对象进行不必要的排序:

return worldObjects.OrderBy(wo => wo.Position.GetDistance(pos)).First();
您可以为此使用:

return worldObjects
    .Aggregate((result, current) => (current.Position.GetDistance(pos)
                                     < result.Position.GetDistance(pos))
                                    ? current : result);
然而,另一种可能性是对对象进行不必要的排序:

return worldObjects.OrderBy(wo => wo.Position.GetDistance(pos)).First();

.GetDistance
最可能的结果是
double
float
。您不应该将它们与
=
进行比较。
.GetDistance
的最可能结果是
双精度
浮点值
。您不应该将它们与
==
进行比较。Linq无论如何都不快,主要是为了方便。。。为了快速完成,他应该使用四叉树,只对相关对象进行迭代。Linq并不快,主要是为了方便。。。为了快速完成,他应该使用四叉树并只对相关对象进行迭代。