Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизМассив неизвестной длины Найти похожие ветки
← →
Виталька2006 (2006-02-07 11:48) [0]Здравствуйте мастера.
Вот для хранения списка строчек в делфи есть очень удобно
использовать тип TStrings.
А как лучше всего хранить массив переменной длины,
например, целых чисел или каких-либо записей?
Спасибо.
← →
Desdechado © (2006-02-07 11:50) [1]TList с указателями на эти записи, имхо
можно просто array of TMyRecord, но мне не нравится
← →
Fay © (2006-02-07 11:53) [2]array of
← →
Виталька2006 (2006-02-07 12:23) [3]Правильно я понял, что нужно создать динамический массив, а потом
при добавлении элемента делать setlength(myarray, length(myarray) + 1) ?
2 Desdechado: можно поинтересоваться,а почему не нравится array of TMyRecord ? может там какие подводные камни?
← →
Kolan © (2006-02-07 12:43) [4]Правильно я понял, что нужно создать динамический массив, а потом
при добавлении элемента делать setlength(myarray, length(myarray) + 1) ?
Угу
← →
evvcom © (2006-02-07 12:48) [5]
> Правильно я понял, что нужно создать динамический массив,
> а потом
> при добавлении элемента делать setlength(myarray, length(myarray)
> + 1) ?
>
> Угу
В частном случае - угу, в общем, все гораздо сложнее.
С TList и указателями на динамические массивы тоже надо быть осторожным, т.к. сами данные могут при ресайзинге "убежать" с одного места в другое.
← →
MBo © (2006-02-07 12:49) [6]>setlength(myarray, length(myarray) + 1)
Можно, но потом будешь спрашивать, почему программа долго работает и кучу памяти отъедает...
Лучше сразу задать массив разумной длины, а при необходимости расширения - увеличивать на значительное количество элементов сразу.
← →
Ega23 © (2006-02-07 12:54) [7]Я бы в TList всё хранил.
← →
DUDAS © (2006-02-07 13:00) [8]Можно так:
var
intArray : array of integer;
begin
intArray:=(New(IntArray,100); //Размер массива 100
end;
← →
Desdechado © (2006-02-07 13:06) [9]> почему не нравится array of TMyRecord ? может там какие подводные камни?
C неделю назад я описывал их. Повторять лениво. Ищи.
evvcom © (07.02.06 12:48) [5]
>С TList и указателями на динамические массивы
Не понял. При чем тут это. Либо TList, либо дин.массив.
← →
Виталька2006 (2006-02-07 13:09) [10]>Можно, но потом будешь спрашивать, почему программа долго работает и кучу памяти отъедает...
>Лучше сразу задать массив разумной длины, а при необходимости
>расширения - увеличивать на значительное количество элементов сразу.
В том и дело. У меня задача - сохранить контуры, которые пользователь обводит мышкой. Т.е. сохранить все Х-ы и Y-ки.
А он может как маленький кружочек выделить, так и пол экрана обвести..
← →
Vlad © (2006-02-07 13:15) [11]
> Виталька2006 (07.02.06 13:09) [10]
> Т.е. сохранить все Х-ы и Y-ки.
> А он может как маленький кружочек выделить, так и пол экрана
> обвести..
array of TPoint ?
или TList, куда пишешь PPoint ( = ^TPoint)
← →
MBo © (2006-02-07 13:15) [12]>DUDAS © (07.02.06 13:00) [8]
>Можно так
нельзя так.
>Виталька2006 (07.02.06 13:09) [10]
Используй TList.
← →
MBo © (2006-02-07 13:16) [13]>Виталька2006
А сохранять нужно координаты точек или что-то еще?
← →
Kolan © (2006-02-07 13:25) [14]Можно выделить заведомо больший массив, а когда узнаешь сколько точек надо сохранить - уменьшишь его длинну...
← →
Виталька2006 (2006-02-07 13:29) [15]спасибо.
>А сохранять нужно координаты точек или что-то еще?
В массиве только координаты хранятся.
А вообще будет объект (или запись) "контур", для которого хранятся
название, тип и тд.. и как одно из полей - граница, тот самый массив точек.
по советам, я так понимаю, что в данном случае ТЛист удобней...
← →
evvcom © (2006-02-07 13:38) [16]
> >С TList и указателями на динамические массивы
> Не понял. При чем тут это. Либо TList, либо дин.массив.
А... Где-то показалось, что массив массивов. С массивом записей все действительно гораздо проще.
← →
MBo © (2006-02-07 13:42) [17]
Pts:TList;
procedure TForm18.FormCreate(Sender: TObject);
begin
Pts:=TList.Create;
end;
procedure TForm18.Button3Click(Sender: TObject);
var
i:Integer;
Pt:TSmallPoint;
begin
for i := 0 to Pts.Count - 1 do begin
Pt:=TSmallPoint(Pts[i]);
ListBox1.Items.Add(Format("%d: %d",[Pt.x, Pt.y]));
end;
end;
procedure TForm18.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
Pt:TSmallPoint;
begin
Pt:=SmallPoint(X,Y);
Pts.Add(Pointer(Pt));
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.119 c