Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Вниз

Динамические массивы...   Найти похожие ветки 

 
Knight ©   (2004-03-24 21:48) [0]

... сказал я, задвинув забрало, в ожидании града камней... [)

Есть ли функции, для удаления произвольного элемента из динамического массива?


 
Fredericco ©   (2004-03-24 22:03) [1]

Рискну.
ИМХО - нет.

ЗЫ. Интересно, а если так сделать Dispose(@MyArr[i]), чего получится?..


 
Knight ©   (2004-03-24 22:05) [2]

На сколько помню... Dispose - это для всего массива...


 
TButton ©   (2004-03-24 22:06) [3]

>ЗЫ. Интересно, а если так сделать Dispose(@MyArr[i]), чего получится?..
обращение к MyArr[i] вызовет AV?


 
Knight ©   (2004-03-24 22:16) [4]

... от удивления поднял забрало...

Неужели и правда нет? А я думал, раз Length() берёт длину, то почему бы не быть какой-то procedure Delete(DinArr,Index,Count) удаляющей из динамического массива произвольное количество элементов с указанной позиции, ведь, как я понимаю, массив состоит из элементов одного типа, под которые выделены равные блоки памяти... т.е. если в массиве есть объекты, то высвобождаем их, затем вызываем процедуру и она сдвигает массив в нужном месте.


 
TButton ©   (2004-03-24 22:22) [5]

эээ.... а зачем задавался вопрос???


 
Anatoly Podgoretsky ©   (2004-03-24 22:32) [6]

Ответ, нет, если не считать удаления конца.


 
Knight ©   (2004-03-24 22:50) [7]


> [6] Anatoly Podgoretsky ©   (24.03.04 22:32)

А в чём сложность?


 
Nous Mellon ©   (2004-03-24 22:52) [8]

Думается, что сложность в том чтобы правильно определить размер элемента(он может быть разным в зависимости от Типа данных?) а потом еще и правильно сдвинуть остальные. Но это так мысли вслух :)


 
Knight ©   (2004-03-24 22:52) [9]

А нельзя как-то это использовать?

procedure TStringList.Delete(Index: Integer);
begin
 if (Index < 0) or (Index >= FCount) then Error(@SListIndexError, Index);
 Changing;
 Finalize(FList^[Index]);
 Dec(FCount);
 if Index < FCount then
   System.Move(FList^[Index + 1], FList^[Index],
     (FCount - Index) * SizeOf(TStringItem));
 Changed;
end;


 
TButton ©   (2004-03-24 22:53) [10]

надо использовать не массивы а связаные списки (так?), там с удалением нет проблем.


 
TButton ©   (2004-03-24 22:54) [11]

а вообще - функция есть. я в свое время писал такую. могу найти... если надо... но помоему такие все писали...


 
Knight ©   (2004-03-24 22:59) [12]


> [10] TButton ©   (24.03.04 22:53)
> надо использовать не массивы а связаные списки (так?), там
> с удалением нет проблем.

Можно конечно, делал когда-то в BP7.0...


> ] TButton ©   (24.03.04 22:54)
> а вообще - функция есть. я в свое время писал такую. могу
> найти... если надо... но помоему такие все писали...

Вот и я о том же, а почему её среди стандартных нет?


 
panov ©   (2004-03-24 23:00) [13]

Даже если данные имеют одинаковую длину(например, Integer), то не факт, что в любой версии Windows выравнивание элементов в памяти будет одинаковым.
А значит, универсальную фуекцию надо писать самому.


 
Anatoly Podgoretsky ©   (2004-03-24 23:18) [14]

Knight ©   (24.03.04 22:50) [7]
Слодностей нет, но и функци нет. Вопрос то был не про ток, как сделать, а если ли функция.


 
TButton ©   (2004-03-24 23:26) [15]

а вот не всякому массиву одна и та же функция подойдет. хотя почему, подойдет если будет руками пертаскивать элемент за элементом... и опять же... одно дело массив integer"ов и совсем другое - массив объектов. первый хранит интеджеры, а второй - указатели (так?). во втором случае еще и объекты чистить надо, вобщем проще самому написать удалялку.


 
Knight ©   (2004-03-25 00:07) [16]

Нет так нет... Подумаю, может на списки переделаю. Всем спасибо.


 
Alex Konshin ©   (2004-03-25 02:36) [17]

Ну можешь еще посмотреть мои динамические массивы. Там удаление есть.
А у тебя динамические массивы чего?


 
Думкин ©   (2004-03-25 06:11) [18]

Про такое у Бакнелла хорошо прописано.


 
MBo ©   (2004-03-25 06:23) [19]

Удаление 9-го элемента
Move(DynArr[10],DynArr[9],SizeOfArrayElement*(Length(DynArr)-10));
при необходимости
SetLength(DynArr,Length(DynArr)-1);


 
Alex Konshin ©   (2004-03-25 07:32) [20]

MBo ©   (25.03.04 06:23) [19]
Это нельзя оставить без комментария.
В общем случае это некорректно, так как в случае массива записей, в которой есть поля String, Variant и т.п. эти поля не будут финализироваться (например, не будут уменьшаться счетчики ссылок).


 
MBo ©   (2004-03-25 07:54) [21]

>Alex Konshin ©   (25.03.04 07:32) [20]
Безусловно. Однако автор ни разу не сказал, какого типа элементы.


 
Verg ©   (2004-03-25 08:38) [22]

Чем-то это мне напоминает вопрос - "Как удалить бит из байта?".....


 
Паниковский   (2004-03-25 08:51) [23]

Knight
сам напиши так быстрее чем искать фигнистику всякую


 
Knight ©   (2004-03-29 21:12) [24]


> Alex Konshin ©   (25.03.04 02:36) [17]
> Ну можешь еще посмотреть мои динамические массивы. Там удаление
> есть.
> А у тебя динамические массивы чего?


Record в который входят String, Integer, TBitmap.


> Паниковский   (25.03.04 08:51) [23]
> Knight
> сам напиши так быстрее чем искать фигнистику всякую


В общем уже сделал.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.053 c
11-1061979911
mdw
2003-08-27 14:25
2004.04.18
Версия 1.83


14-1080482122
KORN
2004-03-28 17:55
2004.04.18
Установка Win98 на другой диск?


9-1064036448
марсианин
2003-09-20 09:40
2004.04.18
Тело и ландшафт


14-1080331912
rubin
2004-03-26 23:11
2004.04.18
Где достать инфу на AMD Duron (Spitfire) строение кэша и т.д. ПЛЗ


6-1076763275
rulezz
2004-02-14 15:54
2004.04.18
как с помощью nmhttp отправить пост запрос скрипту и получить фай





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