Конференция "Прочее" » Быстрый поиск в ComboBox
 
  • TIF © (15.04.08 23:56) [0]
    Как наиболее быстро пройтись по элементам комбобокса и оставить из них только удовлетворяющие условию? Кол-во элементов может быть маленьким, а может быть и очень большим...
    Нужно САМЫЙ БЫСТРЫЙ способ, обычный цикл будет страшно тормозить...
  • ProgRAMmer Dimonych © (15.04.08 23:58) [1]
    > TIF ©   (15.04.08 23:56)  
    > Как наиболее быстро пройтись по элементам комбобокса и оставить
    > из них только удовлетворяющие условию? Кол-во элементов
    > может быть маленьким, а может быть и очень большим...
    > Нужно САМЫЙ БЫСТРЫЙ способ, обычный цикл будет страшно тормозить.
    > ..

    Без предварительной обработки - только за O(N), IMHO.
  • DVM © (15.04.08 23:59) [2]

    > обычный цикл будет страшно тормозить...

    Сам по себе цикл тормозить не будет. Тормозить может проверка на условие.


    > а может быть и очень большим...

    сколько? миллиард? а зачем пихать в комбобокс огромное количество записей вообще?
  • Kolan © (16.04.08 00:15) [3]
    > Кол-во элементов может быть маленьким, а может быть и очень
    > большим…

    Если элементов много, то комбо бокс не годится.
  • Anatoly Podgoretsky © (16.04.08 00:43) [4]
    > TIF  (15.04.2008 23:56:00)  [0]

    Откуда берутся данные и много их?
  • Real © (16.04.08 02:40) [5]

    > Как наиболее быстро пройтись по элементам комбобокса и оставить
    > из них только удовлетворяющие условию

    А почему оставить, не логичнее ли не пихать туда лишнее? :) Проверяем данные (где бы они не лежали) и удовлетворяющие условиям добавляем в комбо.
  • Германн © (16.04.08 02:45) [6]

    > Real ©   (16.04.08 02:40) [5]
    >
    >

    АП уже спросил.
  • Real © (16.04.08 02:53) [7]

    > АП уже спросил.

    АП спросил откуда и скока, а я хочу узнать почему комбо вообще взят за хранилище :)
  • TIF © (16.04.08 17:21) [8]
    Ага... Понял, куда вы клоните ;)

    Значит, в ComboBox хранятся все запросы пользователя, которые он туда вписывал... А нужно при вводе как, например, IE, показать выпадающий список с элементами, начинающимися с заданных символов...

    Хм... Хранить-то можно и не в ComboBox... Но мне всякие DBGrid не по душе...

    Количество данных, конечно, можно ограничить - например, только 100 последних. Но всё-таки, быстро пройтись по всем элементам никак?
  • tesseract © (16.04.08 17:43) [9]

    > Но всё-таки, быстро пройтись по всем элементам никак?


    Делаешь двоичное дерево по первым буквам запросов :-) типо того

    Д-Е - Р - Е - В -О
    |   \
    |     Б- Р -И
    \
      Р -Я -  Н - Ь


    И К списочку или масивчику приаттачиваешь

    И выбираешь - перебирает огромное количество по певым буквам оч быстро.  Или как вариант - memtable.
  • Игорь Шевченко © (16.04.08 17:49) [10]
    в memo надо хранить
  • Dennis I. Komarov © (16.04.08 17:51) [11]
    > [8] TIF ©   (16.04.08 17:21)

    Заметь, в IE вылетает с предлогаемым списком не Комбик
  • Игорь Шевченко © (16.04.08 17:52) [12]

    > в IE вылетает с предлогаемым списком не Комбик


    в IE вообще многое по уму сделано.
  • evvcom © (16.04.08 18:03) [13]

    > Значит, в ComboBox хранятся все запросы пользователя, которые
    > он туда вписывал...

    Вообще-то в нем хранится только то, что программист решил там хранить. И то до определенного момента, пока комбик жив или принудительно не почищен.
  • TIF © (16.04.08 18:17) [14]

    > Заметь, в IE вылетает с предлогаемым списком не Комбик


    Заметил, там ещё resize предусмотрен...
    Это видимо там что-то похожее очень на ListBox...


    > в memo надо хранить

    Так что думаю либо использовать Edit в паре с ListBox + заезженное:
    ListBox1.Perform(LB_SELECTSTRING,-1,longint(Pchar(Edit1.text)));


    > в IE вообще многое по уму сделано

    :) А в FF нет?


    > Вообще-то в нем хранится только то, что программист решил
    > там хранить. И то до определенного момента, пока комбик
    > жив или принудительно не почищен.

    Я в курсе :) Данные будут храниться естественно вреестре или в файле... А потом мы их туда и подгрузим

    Хотя, наверное лучше просто пройтись по листбоксу (лучше виртуальному), найти нужные строчки, а потом их добавить в комбобокс... Но если юзер просто захочет просмотреть список комбобокса? Придётся туда всё кидать и потом снова очищать... Задал я себе мороку...

    Вот видел IEAddress - этот компонент как раз и выполняет то что мне нужно... но там доступен только список url-ов
  • Anatoly Podgoretsky © (16.04.08 20:02) [15]
    > TIF  (16.04.2008 17:21:08)  [8]

    В данном случае совсем не обязательно что то фильровать, в комбо итеративный поиск, достаточно упорядочить по алфавиту
 
Конференция "Прочее" » Быстрый поиск в ComboBox
Есть новые Нет новых   [134434   +29][b:0][p:0.001]