Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Delphi: TList vs Array_of_...

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

apnss

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Данную тему решил создать для поиска истины, а именно:  что более правильно? Использовать  TList или  ДинМассив? Начало спора можно посмотреть в этой теме  http://forum.ru-board.com/topic.cgi?forum=33&topic=10477&start=1800#14  
 

Цитата:
SetLength(AllChordTunes[n], Length(AllChordTunes[n]) + 1);
AllChordTunes[n][High(AllChordTunes[n])].Pos := ...;
AllChordTunes[n][High(AllChordTunes[n])].Tune := ...;
 
 
Логично ли такой  код, который кстати как я понял находится в цикле,  перевести на TList?  
 
Оппонент жаждет кода, будет ему код. Через недельку - на КПК сильно не покодишь  

Всего записей: 708 | Зарегистр. 26-02-2002 | Отправлено: 10:37 12-04-2010 | Исправлено: apnss, 10:41 12-04-2010
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
apnss
ИМХО все зависит от задачи. Объясню - например если у меня в программе только один массив, то я обычно использую array of. Если больше одного или требуется делать боле-менее сложные движения с ним - то использую стринглист (у меня в основном строки). Начало спора читал и в принципе склоняюсь что в несложных проектах можно не городить огород с ООП.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 11:54 12-04-2010
data man



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если тема создана только для того, чтобы продолжить тот спор, то я пас.
 
Если же в общем случае:
Цитата:
что более правильно? Использовать  TList или  ДинМассив?
, то есть такое наблюдение: всё чаще в различных библиотеках вместо TList используются массивы.
Особенно в новых библиотеках, а не имеющих долгую историю, авторы которых придерживаются принципа "Если работает, то лучше не трогать" или не имеющих времени/желания многое переделывать.
 
Как говорится, тенденция, однако.

----------
Любой достаточно развитый тролль неотличим от подлинно помешанного на какой-либо идее.
Кекс. Антибиотики. Ламбада.

Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 23:15 12-04-2010
G787



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
"Если работает, то лучше не трогать"

Это называется первый принцип советской кибернетики. )))
 

Всего записей: 1035 | Зарегистр. 04-12-2005 | Отправлено: 13:04 14-04-2010
Rudia



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имхо, если работаешь с набором каких-то объектов, то лучше использовать  коллекции, которые являются стандартом в современных языках ООП (bags, lists, maps, sets и пр. правда разработчики делфи почему-то решили, что им это не надо), а спор из разряда - "что лучше, квадратное или треугольное колесо".

Всего записей: 324 | Зарегистр. 13-09-2006 | Отправлено: 16:17 14-04-2010
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я предполагаю что в любом случае необходимо пользоваться ОБЪЕКТАМИ во всех задачах, где можно обойтись только ими. Это может зависеть от уровня собственной подготовки. Array of можно сравнить с ядерной физикой, а TList - столярным делом.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 16:36 14-04-2010
apnss

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
не до конца "въехал" в последнее предложение ...  

Всего записей: 708 | Зарегистр. 26-02-2002 | Отправлено: 16:49 14-04-2010
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
apnss

Цитата:
не до конца "въехал" в последнее предложение

Я думаю он и сам не всегда понимает свои фразы.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 09:34 16-04-2010
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShIvADeSt

Цитата:
Я думаю он и сам не всегда понимает свои фразы.

А я думал это только у меня сложилось такое впечатление

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 11:40 16-04-2010
AviDen



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Данную тему решил создать для поиска истины

Бггг, года идут, а люди не меняются. Всё ищут истину в одном и том же сарае с граблями.
 
Нет ничего абсолютно правильного. Всё зависит от конкретного случая.
 
Навскидку могу указать основные плюсы и минусы списков и массивов:
 
TList/TStringList/etc:
 
    + имеются в наличии все необходимые методы по вставке/поиску/удалению/сортировке записей (поиск/сортировка - только в TStringList)
    + минимизация операций по выделению/освобождению памяти как для основного списка (наращивание количества эл-тов происходит путем удвоения), так и для связанных объектов (т.к. мы вынуждены хранить все доп. данные отдельно и в списке храним лишь указатели на них, то эти данные остаются в неприкосновенности при работе со списком, что экономит время)
    - невозможность прямого доступа к элементам масссива (необходимость разыменовывать указатели и приводить их к соотв. типу, что удлиняет код / затрудняет чтение)
    - память под доп. данные для элементов необходимо выделять (и освобождать) вручную
 
Динамические массивы:
 
    + возможность хранения типизированных данных в массиве, простота доступа к ним
    + быстрота реализации, если работа с массивом не предполагает полного набора операций (напр., удаление/перемещение эл-тов)
    + является типом данных с автоматическим выделением /освобождением памяти, т.е., не требуют обязательной ручной финализации (считайте, что они идут со своим собств. "сборщиком мусора")
    - избыточность операций по выделению/освобождению памяти при изменении кол-ва элементов массива/изменению их порядка, а также необходимость их реализации вручную
 
P.S.

Цитата:
Я предполагаю что в любом случае необходимо пользоваться ОБЪЕКТАМИ во всех задачах, где можно обойтись только ими.

Ещё один бестолковый принцип, исповедуемый только лишь потому, что так учил строгий препод в школе/институте/университете или так написал умный дядька в книжке. Пользоваться необходимо тем, что удобнее / оптимальнее в конкретном случае. Иногда это стандартные объекты, а иногда и до низкоуровнего inline-asm'а приходится спускаться.

Всего записей: 316 | Зарегистр. 05-06-2007 | Отправлено: 19:48 19-04-2010
Glukodel



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
apnss
как дети малые - ей богу  

Цитата:
Логично ли такой  код, который кстати как я понял находится в цикле,  перевести на TList?

на такой вопрос классический ответ - вас это беспокоит? хотите об это поговорить?
 
а если серьёзней, то сначала нужно определить критерии оптимальности кода, и только тогда можно применять логику для определения логичности решения  
если нет узких мест - ОБА варианта работают и можно пользоваться
Цитата:
первым принципом советской кибернетики

если слишком большое время вставки и нет затыка по чтению (при последовательном чтении массив будет быстрее) можно уменьшить время заполнения структуры используя TList, НО
не надо заблуждаться(взято из предыдущей темы):

Цитата:
Использование динамических массивов, для которых часто выполняется SetLength, приводит к сильной фрагментации памяти  выделенной приложению  

и массив и TList получают память вызовом ReallocMem... правда, странно?
конечно, при постепенном увеличении кол-ва, TList это делает реже в 4/16 раз... но при единоразовом - одинаково
еще пример - у нас заранее есть кол-во элементом, доступ к ним последовательный, перебраны будут все, возможно и не 1 раз(какая-нибудь число дробилка)... тут массив будет бешено рулить
 
итог прежде чем что-то делать (это общее правило, применимое ко всем вопросам в жизни ) - определите критерии, по которым будете оценивать результат ибо если нет других критериев, работает  
Цитата:
первый принцип советской кибернетики

Всего записей: 97 | Зарегистр. 16-08-2004 | Отправлено: 21:28 27-04-2010
YuriyRR



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я пользую коллекции ну и ТList тоже ) да и дин массивы, но редко ). А еще деревья, особливо VT нравится и с динамически подгр. узлами, ай хорошо. и циклы  for while repeat и еще на с пишу и linux мне нравится и руби лучше всех языков.

Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 23:51 27-04-2010
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Delphi: TList vs Array_of_...


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru