Из всех объектов, соответствующих условию, найдите ближайшего к позиции. Предположительно, очень распространенная проблема. Текущий код выглядит следующим образом:Как написать функцию FindClosestMatching?
protected Foo FindClosestFooMatching (Vec pos, Func<Foo, bool> matches)
{
float bestDist = float.MaxValue;
Foo bestFoo = null;
foreach (Foo foo in AllFoos()) {
if (matches (foo)) {
float dist = pos.Dist (foo.Center);
if (dist <= bestDist) {
bestDist = dist;
bestFoo = foo;
}
}
}
return bestFoo;
}
Я имею в виду несколько способов, чтобы реорганизовать этот код, но не смог найти действительно хороший еще нет. Если у вас есть минута, сделайте снимок. :-)
Редактировать: Относительно вопросов Эрика. Это стандартное трехмерное пространство с евклидовой метрикой (= быстро). Вероятность кластеризации точек и вероятность нежелательных запросов неизвестны.
Не удаляйте его! скорее отправьте свое решение в качестве ответа, мне это очень нравится :) –
К сожалению, я удалил свой предыдущий комментарий. Поскольку вас это интересует, я не удалю. – mafu
Итак, вы хотите переписать функцию для максимальной производительности? Вы хотите, чтобы у него были минимальные строки кода? Вам нужно предложение лучшей структуры данных, чем список? В частности, какой рефактор вы ищете? – Juliet