![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TStringList vs. TList<string>
TObject © (2010-12-14 15:44:00)В рамках метода собственного класса необходимо получить и хранить отсортированный по году список имен файлов формата log_<день>_<месяц>_<год>. Что посоветуете использовать:
TStringListилиTList<string>?
clickmaker (2010-12-15 11:23:00) [1]> что на самом деле лучше
xml? -)
Jeer (2010-12-15 10:46:00) [2]Когда-то давно тестировал способы представления данных в словарях 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ГГц.
DVM (2010-12-14 23:08:00) [3]Щас придет Медвежонок и объяснит, что на самом деле лучше.
_Юрий (2010-12-14 19:37:00) [4]
> В рамках метода собственного класса необходимо получить
> и хранить отсортированный по году список имен файлов формата
> log_<день>_<месяц>_<год>. Что посоветуете использовать:
> TStringList или TList<string>?
TDictionary<string, TDateTime>
Anatoly Podgoretsky (2010-12-14 19:15:00) [5]> TObject (14.12.2010 16:40:12) [12]
А нельзя ли сделать формат log_гггг_мм_дд.log
Тогда и сортировать нечего, stringlist сам это сделает.
Ega23 (2010-12-14 17:09:00) [6]При больших объёмах данных StringList будет тормозить.
Бери обычный TList и дихотомией фигач туда Pointer(Value);
И. Павел (2010-12-14 17:04:00) [7]
> а как мне быстро выцеплять после очередного FindNext месяц
> и год из имени файла. Для каждого найденного файла делать
> Copy, Pos? Или лучше заюзать регэкспы.
Если месяц и год занимают строго два символа (например 01, 05), то достаточно одного Copy. А иначе - искать символы "_" и выделять числа между ними - что, наверное, проще сделать простым проходом строки в цикле, чем комбинацией с pos. Все равно, даже при использовании StringList, придется выделять дату для сортировки, так что без этого не обойтись.
Регулярные выражения для такой простой операции слишком тяжелые и медлительные.
Германн (2010-12-14 17:03:00) [8]
> по тз файлы имеют формат log_<день>_<месяц>_<год>.log
>
А надо было бы log_<год>_<месяц>_<день>.log
TObject (2010-12-14 16:40:00) [9]по тз файлы имеют формат log_<день>_<месяц>_<год>.log
Пример:
log_14_11_2010.log
log_13_12_2010.log
log_14_12_2010.log
Anatoly Podgoretsky (2010-12-14 16:37:00) [10]А надо из имени или из даты файла
TObject (2010-12-14 16:35:00) [11]
> Зачем хранить строки, если можно обойтись числами (датами).
> Такой механизм будет работать быстрее. Вместо сортировки
> - бинарный поиск и вставка даты после очередного FindNext.
>
>
> А строки можно получать уже при обработке этого массива.
>
а как мне быстро выцеплять после очередного FindNext месяц и год из имени файла. Для каждого найденного файла делать Copy, Pos? Или лучше заюзать регэкспы.
Anatoly Podgoretsky (2010-12-14 16:23:00) [12]> TObject (14.12.2010 15:44:00) [0]
Имена файлов это строка, а с TList ты возможно споткнешься со временем жизни
строки.
sniknik (2010-12-14 16:21:00) [13]> Что посоветуете использовать: TStringList или TList<string>?
TADO/TClientDatased / TMemoryTable.
Jeer (2010-12-14 16:18:00) [14]А.. я не обратил внимание на необходимость сортировки по году.
Ну.. опять же, перейти к варианту TStringList в режиме словаря
"год" = "имя_файла"
Или же нужна сортировка год, месяц, день, что логично ?
И. Павел (2010-12-14 16:17:00) [15]Зачем хранить строки, если можно обойтись числами (датами). Такой механизм будет работать быстрее. Вместо сортировки - бинарный поиск и вставка даты после очередного FindNext.
А строки можно получать уже при обработке этого массива.
TObject (2010-12-14 16:10:00) [16]
> А вот это я не понял...
Вызывается метод. В нем я получаю список имен файлов из папки (FindFirst, FindNext), сортирую по месяцу и году, далее далее что-то делаю и удаляю список, т.о. список создается и уничтожается в рамках метода (временный
).
> Ну и чем TStringList не устраивает ?
что в TStingList, что в TList<string> самому нужно писать сортировку. TStringList сортирует по алфавиту. + в TStringList дофига методов которые мне не нужны вообще. Поэтому склоняюсь больше к TList<string>
Jeer (2010-12-14 16:01:00) [17]Если же еще надо искать, то THashedStringList
И. Павел (2010-12-14 16:01:00) [18]
> В рамках метода собственного класса необходимо получить и хранить
А вот это я не понял... Если в C++ что-то нужно хранить "в рамках метода", используют статические переменные. Но вряд ли это то что нужно в этом случае.
Jeer (2010-12-14 16:00:00) [19]Ну и чем TStringList не устраивает ?
И. Павел (2010-12-14 15:57:00) [20]var list: array of TDateTime;