Главная страница
    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


15-1290788068
z007
2010-11-26 19:14
2011.03.06
Помогите написать справочно-правовую систему


2-1292603871
НЕКТО
2010-12-17 19:37
2011.03.06
Как создать объект "Монитор" в Delphi 7?


2-1291978918
Any
2010-12-10 14:01
2011.03.06
Ошибка при выполнении запроса


3-1253856043
vegarulez
2009-09-25 09:20
2011.03.06
[SQL, MS Access] Вопрос про CREATE TABLE. Формат полей.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский