У меня есть упорядоченная коллекция значений DateTime
. Я хочу получить все значения в коллекции между конкретным временем начала и окончания. Какую коллекцию я должен использовать, чтобы сделать это наиболее эффективным образом и как?Получить ассортимент в заказе коллекции
ответ
Вы можете использовать List<T>
, но храните его под заказ. Используйте метод BinarySearch, чтобы найти начало DateTime
в списке. Обратите внимание, что он возвращает:
Нулевой индекс элемента в отсортированном списке, если элемент найден; в противном случае - отрицательное число, которое является поразрядным дополнением к индексу следующего элемента, который больше элемента или, если нет более крупного элемента, поразрядное дополнение к Count.
Поэтому, если значение отрицательное, вам необходимо применить побитовое дополнение (оператор ~
), чтобы найти первый индекс, находящийся в пределах диапазона. Затем вы можете использовать один и тот же процесс и вычесть 1, чтобы найти последний элемент в пределах диапазона.
Использование LINQ (как это один из тегов), вы можете сделать это следующим образом:
IEnumerable<DateTime> orderedDateTimes; // Your ordered DateTime collection
DateTime start; // The start date/time, inclusive
DateTime end; // The end date/time, inclusive
var range = orderedDateTimes
.SkipWhile(dt => dt < start)
.TakeWhile(dt => dt <= end);
Это займет O (N) худший случай, чтобы получить диапазон. Тем не менее, вы можете принудительно привести результат в список или массив, чтобы иметь возможность его эффективно использовать:
DateTime[] rangeArray = range.ToArray();
// -or-
List<DateTime> rangeList = range.ToList();
- 1. Multiple ассортимент продукции в Python
- 2. Ассортимент связанного списка в c
- 3. Ассортимент форумов - Symfony 3
- 4. WooCommerce получить информацию о заказе
- 5. Как получить информацию о покупках в заказе
- 6. Как получить несколько ProductID в заказе MySQL
- 7. Ассортимент ONLYOFFICE и mime-типов
- 8. Что такое общий ассортимент семафоров?
- 9. Ассортимент продуктов массового импорта - WooCommerce?
- 10. Случайный ассортимент чисел для переменных
- 11. Ассортимент фильтров на Spree commerce
- 12. Проблемы сонаты сокета [Ассортимент продуктов]
- 13. Ассортимент элементов в списке списков конкретных длин
- 14. Как добавить функции в ассортимент кнопок последовательно
- 15. Ассортимент модели CakePHP: Посмотреть изображение товара
- 16. Получить информацию о заказе с возвратов
- 17. Magento 1.7.0.2 Получить информацию о заказе
- 18. PHP получать рабочий день ассортимент неделю
- 19. Получить полную информацию о заказе - Wazala API
- 20. Как изменить заказ в заказе + сохраненная коллекция?
- 21. MPI - Печать в заказе
- 22. Implicits в заказе
- 23. Пролог в заказе обход
- 24. Печать Multimap в заказе
- 25. Имена столбцов в заказе
- 26. Поиск в заказе
- 27. Пользовательское поле в заказе
- 28. Задачи процесса в заказе
- 29. отчетов в заказе покупателя
- 30. Двоичный поиск в заказе QVector
Это не принесет никакой пользы, эта коллекция уже отсортирована. Я не думаю, что LINQ является хорошим выбором для этой проблемы. – MarcinJuraszek
@MarcinJuraszek: Если коллекция не была отсортирована, мой код не сработает. Поэтому он использует это. Однако, в максимально возможной степени (двоичный поиск и т. Д.). Но он добавил тег LINQ, поэтому я ответил. – Virtlink