2012-02-05 2 views
1

У меня есть коллекция из 8000 тестов в XML-файле. Использование Linq и C#, что является одним из наиболее эффективных способов вычисления процентиля конкретного теста.Как рассчитать процентиль или ранжирование значения в коллекции?

Мой акцент делается на эффективность. Итак, каков рекомендуемый подход? Я также ищу подходящие встроенные функции Linq или C#, рекомендованные для этого вычисления. Есть ли что-то, называемое Percentile() или TopPercent?

+1

Ну, самое дорогое здесь - разобрать ваш xml в объекты inmemory. Расчеты чисел inmemory действительно быстры. 8000 записей не так много. Просто используйте стандартные подходы. Сопоставьте xml с некоторыми классами, затем выполните вычисления или просто выполните все только в одном запросе Linq2XML. – Oybek

+0

Не могли бы вы показать образец XML-фрагмента, а также какие значения вы интересуете? –

+0

@DarinDimitrov ... user763554

ответ

7

Похоже, вы беспокоитесь об эффективности, прежде чем вы подтвердите, что вам нужно , чтобы волноваться об этом.

я бы следующий подход:

  • Загрузите XML файл в память с помощью LINQ к XML (как самый простой XML API в .NET)
  • Преобразовать баллы в список целых чисел (или независимо от типа счета есть)
  • Теперь вы можете узнать общее количество легко
  • Использование Count с предикатом, чтобы узнать, сколько баллов меньше, чем ваша «цель» забить

Если вам нужно проверить несколько баллов, вы, очевидно, только необходимо повторить заключительный шаг.

My первая попытка оптимизации этого (для нескольких проверок) будет сортировать список, поэтому вы можете просто выполнить двоичный поиск, чтобы найти ранг каждого балла. Я бы только пошел , что далеко после бенчмаркинга.

Смежные вопросы