2

Поиск элементов списка по параметрам

Ниже представлен класс, позволяющий производить поиск элементов списка по значениям полей этих элементов.

Использование

Произведем поиск всех структур, в которых поле int=1 И поле color=brown:

Или поиск всех структур, в которых поле int=1 ИЛИ поле color=brown:

Код класса

 

2 Comments

  1. Я бы всё-таки рекомендовал дополнить класс в плане указания параметров и способа поиска. При текущем варианте нет возможности указывать несколько вариантов поиска (OR и AND одновременно).

    например я хочу найти элементы которые int равны 1 И цвет (красный ИЛИ коричневый). При текущей реализации нужно делать дважды поиск и мерджить с исключениями результатов. Это будет затратно по ресурсам.
    к примеру можно сделать что ключ — это способ поиска, а значения это массив как в примере. т.е. что-то типа:
    [PHP]$asearch = new SearchSList($list, [ ‘AND’=>[ [‘int’=>1], ‘OR’=>[‘color’=>’brown’, ‘color’=>’red’]] ]);[PHP]
    Этот вариант похож на поиск и фильтрацию MongoDB, и достаточно удобно для клиента, использующего данный класс
    Плюс нет смысла делать это нестатичным методом. Это будет тратой ресурсов, на хранение ссылки на класс, и GC может не сразу освободить место, он сработает только если вручную сделать unset, либо после выхода из функции, внутри которой вызван этот поиск (а это может быть не скоро, и если большой массив передать в этот класс то он его будет долго хранить). В небольших проектах это простительно, но под highload могут появится проблемы, и найти сразу их будет трудно, тут только профайлер будет спасать, и то не всегда.

    • Несколько условий добавить можно, но для моей задачи это не требовалось. Если будет необходимость – выпущу вторую версию 🙂

      А по поводу вероятных проблем с GC тема интересная и объемная – надо проанализировать и написать статью, когда выгодно использовать статические вызовы для таких типов задач.

      На первый взгляд описанная тобой проблема актуальна для списка объектов, а не для списка массивов (массивы передаются копированием, в отличие от объектов). Надо будет глубже проанализировать эту область: т.к. с другой стороны, если данные не меняются – в памяти создается только копия структуры массива, но не значений.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *