Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.03.06;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.007 c
2-1292048365
SIV5000
2010-12-11 09:19
2011.03.06
TIcon SetSize


2-1292312079
gst
2010-12-14 10:34
2011.03.06
проблема с установкой компонента


2-1292567719
axels
2010-12-17 09:35
2011.03.06
call stack


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


15-1290896924
Friencis
2010-11-28 01:28
2011.03.06
ServicePack for Delphi7 (d7_ent_upd1_1.exe)