Учитывая список векторов, как я могу эффективно выбрать все самые большие значения свойства среди всех членов, которые разделяют другие значения среди различных свойств.
Например, со стандартным Vector3, как бы я выбрал Vector3, которые имеют наибольшее значение Y относительно всех других членов с идентичными значениями X и Z.
Мой текущий метод работы - перебирать список следующим образом:
Vector3 current = Vector3.Zero;
List<Vector3> out = new List<Vector3>();
foreach(var member in MyList)
{
current= member;
foreach(var compare in MyList)
{
if(!predicate(current,compare))
current = compare;
}
out.Add(largest);
}
Но это не кажется особенно эффективным, поскольку он выполняет n квадратов сравнений, где n - длина списка.
Любые предложения по сокращению этого числа до более работоспособного, поскольку я собираюсь использовать это в критически важном разделе моего кода.
Для предиката равных значений X и Z наибольшее значение Y
Пример ввода:
(1,1,1)
(1,2,1)
(1,4,1)
(2,3,2)
(2,5,2)
(1,4,2)
(1,2,2)
(1,1,2)
(2,5,1)
(2,4,1)
(2,9,1)
Ожидаемый результат:
(1,4,1)
(2,5,2)
(1,4,2)
(2,9,1)