![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Vinnety |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 8.4.2003 Репутация: нет Всего: нет |
Умельцы!!! Объясните что такое динамический массив и как с ним работать (например, записать данные - скажем packed record) . Заранее благодарен !
|
|||
|
||||
| altarasjuk |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
Динамический массив- это массив с переменной длинной. Его лучше по возможности не использовать, но если надо то вот:
для изменения длинны массива: SetLength(arr, size); и соответственно:
Вот по такому принципу работается с дин. массивами. Но помни, если обратишься к не существующему эл-ту, то получишь access voilation! Самые популярные грабли -------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
||||
|
|||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 6 Всего: 137 |
>Его лучше по возможности не использовать
А почему? |
|||
|
||||
| altarasjuk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
dm9, по тому, что
Многие пишут так: TList.Add(Pointer(10)) А правильно было бы так: TInteger = class Value: Integer; end; TInteger.Value:= 10; TList.Add(TInteger); Конструкторы как бы подразумиваются... -------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 6 Всего: 137 |
>если обратишься к не существующему эл-ту, то получишь access voilation!
Ясно. Просто нужна аккуратность. Но, в общем-то, как и везде. У меня проблем с динамическими массивами не было, хотя использую их достаточно часто - очень уж удобно. |
|||
|
||||
| altarasjuk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
dm9, а чем не удобны листы? Да и из дин. массива не вырежешь эл № 5.
-------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
2 altarasjuk:
вырежишь. только это будет долго и больно |
|||
|
||||
| altarasjuk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
-------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: 6 Всего: 137 |
Согласен, но я использую динамические массивы, в основном, когда надо сделать какую-то двухмерную таблицу, из которой вырезать ничего не приходится.
|
|||
|
||||
| altarasjuk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
dm9, я не противник массивов как таковых, просто моё мнение - если есть возможность их не использовать - то надо их не использовать.
-------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
|||
|
||||
| Shuricksoft |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 27.3.2002 Где: Odessa, Ukraine Репутация: нет Всего: нет |
А можно первый подредактировать - тоже вырезать получится =) |
|||
|
||||
| altarasjuk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
-------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
|||
|
||||
| &-ray |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 406 Регистрация: 15.4.2003 Где: Казахстан, г Аста на Репутация: нет Всего: нет |
Не больший садизм, чем заново создавать новый массив. Удаляем 5 элемент: for x:=4 to length(my_array)-2 do my_array[x]:=my_array[x+1]; setlength(my_array,length(my_array)-1); По-моему даже просто :-) -------------------- "Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б. -------------------- И снова мышь беру я в руки Куда иду? - Конечно в сруки! |
|||
|
||||
| altarasjuk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
Ну это разве не садизм по сравнению с .Remove(id|element)?
-------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
|||
|
||||
| Fantasist |
|
||||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
Еще проще:
И будет не извращенее чем .Remove(id|element). Только я тоже предпочитаю TList, ибо инкапсуляция. Хотя надоедает писать все время TList.Create, Free. Преобразование типов тоже надоедает, поэтому я обычно пишу наследника от TList с перекрытым Items, который возвращает нужный тип. Но это тоже добивает.
Ну уж большего садизма я не видел. -------------------- Волны гасят ветер... |
||||||
|
|||||||
| altarasjuk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
-------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
|||
|
||||
| Fantasist |
|
||||||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
Ерунда! Преобразование типов всегда несет в себе потенциальную опасность. Ты можешь внести в list указатель на объект одного типа, а потом преобразовать к объекту другого типа и получишь свою ошибку. Оборачивание integer в объект спасет только при вызове методов TObject, которые в программе редко употребляются. В любом случае, для объектов я использую TObjectList, и тут уж все однозначно. А вообще, как я говорил, лучше потратить пару строк и написать наследника - с недавних пор я только так и делаю. Например:
или
Проблема с постоянным преобразованием отпадает. Это сообщение отредактировал(а) Fantasist - 23.6.2003, 19:22 -------------------- Волны гасят ветер... |
||||||
|
|||||||
| altarasjuk |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 331 Регистрация: 7.5.2003 Где: Харьков Репутация: 1 Всего: 1 |
Это правильно, а по поводу Integer это не куда ни катит, это не нормально и просто ужастно.
-------------------- Правда - изобретение маньяков: колет глаза и режет уши. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |