"Ускорение доступа к элементам TObjectList: сохраняем несколько сортировок"Delphi , Базы данных , Сортировка и ФильтрУскорение доступа к элементам TObjectList: сохраняем несколько сортировок В процессе работы с большими данными часто возникает потребность быстрого доступа к определенным элементам списка. Особенно это актуально, когда список нужно просматривать или искать элементы по разным критериям. В данной статье мы рассмотрим, как ускорить доступ к элементам TObjectList в Delphi, сохраняя несколько сортировок. Проблема У нас есть список TCoordinate, который мы храним в TObjectList. Для быстрого поиска элементов список должен быть отсортирован. Однако, мы чередуем поиск по координате X и Y, что требует повторной сортировки списка каждый раз. Есть ли встроенный способ сохранить результат сортировки, чтобы не сортировать список снова и снова? Решение Одним из решений является создание индексной карты, представляющей собой два разных порядка. Это динамический массив целых чисел.
Когда мы хотим прочитать элемент с помощью этого порядка, мы делаем это следующим образом:
Ключевой момент здесь в том, что мы никогда не меняем содержимое «List». Мы рассматриваем его как неотсортированный. Вместо этого мы храним порядок отдельно от контейнера, что позволяет нам иметь несколько таких порядков. Следующий вопрос - как создать порядок. Сначала заполните порядок всеми действительными индексами:
Теперь отсортируйте порядок следующим образом:
Наконец, что использовать в качестве компаратора. Это волшебное место.
И это все! Альтернативное решение Если объекты в вашем списке не меняются, вы можете использовать TList Заключение В этой статье мы рассмотрели, как ускорить доступ к элементам TObjectList в Delphi, сохраняя несколько сортировок. Используя индексную карту или альтернативное решение с TList В статье рассматривается способ ускорить доступ к элементам TObjectList в Delphi, сохраняя несколько сортировок для быстрого поиска по разным критериям без необходимости повторной сортировки списка. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Сортировка и Фильтр ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |