Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Поиск текста в TListView.


Автор: myxa_0 30.1.2007, 12:35
Существует ли быстрый способ проверить, наличае определенного текста в конкретной колонке TListView? Данные не отсортированны. 
ViewStyle: vsReport

Автор: _hunter 30.1.2007, 13:03
существует: хранить set текстов конкретной колонки (для всех колонок -- массив моножеств текстов)

Автор: CatATonik 30.1.2007, 14:20
А зачем? Чем SubItems не устраивают?

Автор: Sunvas 30.1.2007, 17:04
Цитата(myxa_0 @  30.1.2007,  12:35 Найти цитируемый пост)
в конкретной колонке

Ну, дык обыкновенным фором пробежаться по всей колонке. В чем проблема-то??

Автор: myxa_0 31.1.2007, 03:24
Строк более 1000000 и проверку необходимо осуществлять при добавлении каждой новой строки. Новые записи добавляются довольно большое кол-во за короткий промежуток времени.

Sunvas, 
Следовательно обыкновенным фором не так уж и быстро получится.

Автор: dumb 31.1.2007, 05:14
Цитата(myxa_0 @  31.1.2007,  03:24 Найти цитируемый пост)
Строк более 1000000 и проверку необходимо осуществлять при добавлении каждой новой строки.

сохраняй хэши строк в массив.
при добавлении:
1. считаешь хэш добавляемой строки (самое простое - crc32)
2. смотрим в массив на предмет "дупа":
Код

  mov edi, HashArray
  mov ecx, HashArrayCount
  cld
  mov eax, HashOfNewString
  repnz scasd
  je found_dupe

3. а собственно все... smile

массив с хэшами выделять динамически и расширять по мере надобности.

по сравнению с фор'ом должно быть резвее, но все равно... 4 мега пробежать - тоже время...

Автор: CatATonik 31.1.2007, 09:52
При добавлении 1M строк в ListView скорость поиска вообще не будет иметь ни какого значения, т.к. он просто не переваривает подобные объемы, уже после нескольких тысяч он начинает тормозить так, что не приведи господь. Используй что-ить другое, VirtualTreeView например.

Автор: CatATonik 31.1.2007, 13:20
Немного не потеме: выводить пользователю 1000000 строк, это безобразие. Что он там может увидеть? Нужно делать фильтры, группировки и т.д. Кроме того, если средний размер строки ~200 байт 1Mb * 200B = 200Mb!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)