Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.10;
Скачать: CL | DM;

Вниз

динамические массивы и операции   Найти похожие ветки 

 
TButton ©   (2003-02-24 21:17) [0]

В програмах я часто использую динамические массивы ( n:array of TMyType)
Часто мне приходится преобразовывать в объект, чтоб выполнять с ними (массивами) разного рода операции
Часто мне приходится писать для объекта методы а-ля Поиск, Добавление, Вставка, Удаление эл-та массива.
В последнее время мне стало казаться, что то что я делал раньше (и пока еще делаю) - полный бред. И есть способ гораздо проще. Может быть кто-то его знает? Подскажите плз.


 
Yuri-7 ©   (2003-02-24 21:28) [1]

Используй TList или TSortList. Там можешь стандартным образом добавлять, удалять и т.п.


 
TButton ©   (2003-02-25 11:14) [2]

ага. а вот с ним у меня возникли траблы. конкретный пример

type
THuman = record
x,y:integer;
action:THumanAction;
end;

теперь нужно создать массив допустим 10 штук этих гуманоидов, задать каждому случайные координаты, потом эти координаты считать и вывести в мемку. плз хлп.


 
Владислав ©   (2003-02-25 12:51) [3]

Непонятно в чем проблемы, собственно.
Объяви тип своего массива, объяви тип указателя на свой массив, и используй все это.


 
TButton ©   (2003-02-25 17:56) [4]

нееее я имел ввиду, как сделать ето TList"ом.


 
jack128 ©   (2003-02-25 18:01) [5]

Кого сделать листом???

Создай наследника TList
При добавлении элемента выделяй память под этот элемент,
при удалении - освобождай и все дела...


 
TButton ©   (2003-02-26 21:58) [6]

2 jack128 ©
ммм... а можно кусочек кода?


 
jack128 ©   (2003-02-26 22:21) [7]


Пример(наверника с глюками ;-))
type PRec = ^Trec;
Trec = record .... end;
TList.AddRec(Rec : TRec);
var p : PRec;
begin
new(p);
Add(p);
end;

TList.Delete(index : integer);
var p : PRec;
begin
p := PRec(Items[index]);
delete(index);
dispose(p);
end;


 
jack128 ©   (2003-02-26 22:27) [8]

Я же обещал глюк )

TList.AddRec(Rec : TRec);
var p : PRec;
begin
new(p);
p^ := Rec;
Add(p);
end;

Да забыл о минусах предупредить. теперь нельзя использовать TList.Clear;
Есть 2 пути решения
1) Написать TMyList.ClearRec; и переписать диструктор чтоб он вызывал этот метод
2) А лудше обрати внимание на TList.Notify - он вызываются когда
в список добовляют или удаляют указатель..


 
AlexSV ©   (2003-02-27 11:01) [9]

> jack128

Можно вопрос:
а что передается в процедуру
TList.AddRec( Rec : TRec);
если мы внутри делаем new(p) ?

А по поводу TList.Notify, то если туда добавить немного кода, то можно и TList.Clear вызывать.

procedure TMyList.Notify(Ptr: Pointer; Action: TListNotification);
begin
if Action = lnDeleted then
Dispose(Ptr);
inherited Notify(Ptr, Action);
end;


 
TButton ©   (2003-02-28 07:55) [10]

эээ... а в чем фишка переписывания ТЛиста? Я итак этим каждый раз занимаюсь... или я что-то не так понял?


 
Yuri-7 ©   (2003-02-28 09:40) [11]

Можешь ничего не переписывать. Возьми TSortList, например, на www.delphipages.com, там есть метод ClearAll.



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

Текущий архив: 2003.03.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
1-29956
Пубертанец
2003-02-27 15:29
2003.03.10
Список каталогов диска


3-29707
Кило
2003-02-18 15:18
2003.03.10
Как вызвать в процедуре саму себя?


3-29754
jen_bond
2003-02-19 15:04
2003.03.10
Проблема с форматом


1-29790
Zn
2003-02-27 16:27
2003.03.10
Количество файлов в каталоге.


14-30041
Vvedensk
2003-02-20 14:09
2003.03.10
Инсталяция компанента...