Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.03.06;
Скачать: [xml.tar.bz2];

Вниз

TStringList vs. TList<string>   Найти похожие ветки 

 
TObject   (2010-12-14 15:44) [0]

В рамках метода собственного класса необходимо получить и хранить отсортированный по году список имен файлов формата log_<день>_<месяц>_<год>. Что посоветуете использовать: TStringList или TList<string>?


 
И. Павел ©   (2010-12-14 15:57) [1]

var list: array of TDateTime;


 
Jeer ©   (2010-12-14 16:00) [2]

Ну и чем TStringList не устраивает ?


 
И. Павел ©   (2010-12-14 16:01) [3]


> В рамках метода собственного класса необходимо получить и хранить

А вот это я не понял... Если в C++ что-то нужно хранить "в рамках метода", используют статические переменные. Но вряд ли это то что нужно в этом случае.


 
Jeer ©   (2010-12-14 16:01) [4]

Если же еще надо искать, то THashedStringList


 
TObject   (2010-12-14 16:10) [5]


> А вот это я не понял...


Вызывается метод. В нем я получаю список имен файлов из папки (FindFirst, FindNext), сортирую по месяцу и году, далее далее что-то делаю и удаляю список, т.о. список создается и уничтожается в рамках метода (временный
).  


> Ну и чем TStringList не устраивает ?


что в TStingList, что в TList<string> самому нужно писать сортировку. TStringList сортирует по алфавиту. + в TStringList дофига методов которые мне не нужны вообще. Поэтому склоняюсь больше к TList<string>


 
И. Павел ©   (2010-12-14 16:17) [6]

Зачем хранить строки, если можно обойтись числами (датами). Такой механизм будет работать быстрее. Вместо сортировки - бинарный поиск и вставка даты после очередного FindNext.

А строки можно получать уже при обработке этого массива.


 
Jeer ©   (2010-12-14 16:18) [7]

А.. я не обратил внимание на необходимость сортировки по году.
Ну.. опять же, перейти к варианту TStringList в режиме словаря
"год" = "имя_файла"

Или же нужна сортировка год, месяц, день, что логично ?


 
sniknik ©   (2010-12-14 16:21) [8]

> Что посоветуете использовать: TStringList или TList<string>?
TADO/TClientDatased / TMemoryTable.


 
Anatoly Podgoretsky ©   (2010-12-14 16:23) [9]

> TObject  (14.12.2010 15:44:00)  [0]

Имена файлов это строка, а с TList ты возможно споткнешься со временем жизни
строки.


 
TObject   (2010-12-14 16:35) [10]


> Зачем хранить строки, если можно обойтись числами (датами).
>  Такой механизм будет работать быстрее. Вместо сортировки
> - бинарный поиск и вставка даты после очередного FindNext.
>
>
> А строки можно получать уже при обработке этого массива.
>


а как мне быстро выцеплять после очередного FindNext месяц и год из имени файла. Для каждого найденного файла делать Copy, Pos? Или лучше заюзать регэкспы.


 
Anatoly Podgoretsky ©   (2010-12-14 16:37) [11]

А надо из имени или из даты файла


 
TObject   (2010-12-14 16:40) [12]

по тз файлы имеют формат log_<день>_<месяц>_<год>.log

Пример:

log_14_11_2010.log
log_13_12_2010.log
log_14_12_2010.log


 
Германн ©   (2010-12-14 17:03) [13]


> по тз файлы имеют формат log_<день>_<месяц>_<год>.log
>

А надо было бы log_<год>_<месяц>_<день>.log


 
И. Павел ©   (2010-12-14 17:04) [14]


> а как мне быстро выцеплять после очередного FindNext месяц
> и год из имени файла. Для каждого найденного файла делать
> Copy, Pos? Или лучше заюзать регэкспы.

Если месяц и год занимают строго два символа (например 01, 05), то достаточно одного Copy. А иначе - искать символы "_" и выделять числа между ними - что, наверное, проще сделать простым проходом строки в цикле, чем комбинацией с pos. Все равно, даже при использовании StringList, придется выделять дату для сортировки, так что без этого не обойтись.

Регулярные выражения для такой простой операции слишком тяжелые и медлительные.


 
Ega23 ©   (2010-12-14 17:09) [15]

При больших объёмах данных StringList будет тормозить.
Бери обычный TList и дихотомией фигач туда Pointer(Value);


 
Anatoly Podgoretsky ©   (2010-12-14 19:15) [16]

> TObject  (14.12.2010 16:40:12)  [12]

А нельзя ли сделать формат log_гггг_мм_дд.log
Тогда и сортировать нечего, stringlist сам это сделает.


 
_Юрий   (2010-12-14 19:37) [17]


> В рамках метода собственного класса необходимо получить
> и хранить отсортированный по году список имен файлов формата
> log_<день>_<месяц>_<год>. Что посоветуете использовать:
> TStringList или TList<string>?


TDictionary<string, TDateTime>


 
DVM ©   (2010-12-14 23:08) [18]

Щас придет Медвежонок и объяснит, что на самом деле лучше.


 
Jeer ©   (2010-12-15 10:46) [19]

Когда-то давно тестировал способы представления данных в словарях TStringList, THashedStringList и TStringDictionary (DF).
Т.е.
lst.Value["Key"] := "Value";
и тд
Результаты остались и привожу:

Время (сек) формирования словаря ( отсортированного ) емкостью N килослов, приведенное к частоте 1 ГГц:
t = (1/F)*(A + B*N + C*N^2)

TStringList
A = 0.36
B = 0.08
C = 1.14

THashedList
A = 0.03
B = 0.19
C = 1.93

К примеру, на 1000 слов имеем 1.3 и 1.8 сек соответственно.

Для TStringDictionary все на порядок лучше, вдобавок функция линейна
t = (1/F)*2.45*N; [msec]
Т.е. для 1000 слов имеем 2.45 мс, приведенные к частоте 1ГГц.


 
clickmaker ©   (2010-12-15 11:23) [20]

> что на самом деле лучше

xml? -)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.03.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.003 c
3-1254417573
Дмитрий
2009-10-01 21:19
2011.03.06
Firebird-клиент 2.1 и Windows vista


4-1245942576
erglnu
2009-06-25 19:09
2011.03.06
TrackPopupMenu + Трей - Меню не убирается((


1-1248514978
ford
2009-07-25 13:42
2011.03.06
Отследить изм-е позиции слова в TRichEdit при изм-ии раз-ра кнтрл


15-1290673595
pavel_guzhanov
2010-11-25 11:26
2011.03.06
Можно ли заставить FastReport использовать функции из dll?


2-1291998675
TComponent
2010-12-10 19:31
2011.03.06
Программно передвинуть TSplitter





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский