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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
3-29740
Burlik
2003-02-19 14:02
2003.03.10
Help ! Поиск по индеку в DBF-файле ...


1-29839
Someone
2003-02-28 10:51
2003.03.10
Маленький вопрос по OLE


4-30190
Natalie
2003-01-21 21:18
2003.03.10
как узнать имена компов в сети?


7-30159
DDS
2003-01-06 12:51
2003.03.10
Как узнать в какой порт подключена видеокарта?


4-30198
viper
2003-01-20 14:43
2003.03.10
Запущено ли приложение..





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