Оптимизация LINQ для IOrderedEnumerable

2

Кто-нибудь знает, есть ли встроенные возможности библиотеки LINQ (или общедоступной библиотеки) для оптимизированных операций с IOrderedEnumerable<T>, а не IEnumerable<T>?

Например, теоретически расширение Contains<T>() потенциально может быть оптимизировано для использования бинарного поиска, когда оно применяется к конечному IOrderedEnumerable<T>, а T является IComparable.

Другим примером может быть оптимизированная версия Distinct<T>(), которая будет отложена и потокобезопасна (поскольку в упорядоченной сопоставимой коллекции вы всегда можете использовать методы пропуска/соответствия для создания отдельного набора).

Теги:
optimization
linq

1 ответ

6
Лучший ответ

Там есть проблемы...

  • Бинарный поиск не может быть выполнен на IOrderedEnumerable<T>, так как он идеально нуждается в доступе индексатора к списку/массиву. Поэтому сначала нужно было бы назвать что-то вроде ToList()/ToArray()
  • Distinct работает с элементами T, но OrderBy работает на некоторой грани каждого T - это не совсем то же самое, если только вы не знаете, что он упорядочен item=>item; что редко бывает (и трудно доказать).
  • 0
    Отличные очки ... Я не учел значения того, что может означать заказ коллекции во всех случаях.
  • 1
    Nitpick: вам не нужно знать, что он упорядочен по item => item, если вы знаете, что IEqualityComparer, переданный в Distinct, подчиняется тому же порядку, что и OrderBy. Как вы говорите, вы не можете знать это во всех случаях. Я думаю, вы могли бы захватить IComparer, используемый OrderBy / ThenBy, и использовать его, но это, вероятно, слишком много работы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню