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

Вниз

Массив...   Найти похожие ветки 

 
Landgraph   (2002-01-20 23:00) [0]

Как создать массив array[0..VAR] of type, где VAR - переменная, а не константа(по ходу не очень легко)


 
Anatoly Podgoretsky ©   (2002-01-20 23:51) [1]

Бкги в сторону диначеских массивов


 
Андрей Сенченко ©   (2002-01-21 10:34) [2]

a : array of ...
собственно все


 
Gunner   (2002-01-21 11:04) [3]

>Landgraph
учти только то что тебе написали по моему работет только в 5 - версии делфи и выше !


 
Ally ©   (2002-01-21 11:56) [4]

>Landgraph
>Gunner

И ниже тоже - начиная с 4-й версии.


 
SAN ©   (2002-01-21 12:38) [5]

Рекомендую сразу выделять память под большой количество элементов. Проводил эксперементы с большимим объемами данных(порядка 14.000.000). Наблюдалась такая ерунда:
поначалу память выделялалось корректно, но со временем ее начинало СТОЛЬКО выделяться!!!! 2 ГБ(!!!) VM было маловато!
Потом начал выделять "пачками" по 1000 элементов. все стало ок.


 
Landgraph   (2002-01-21 20:37) [6]

А когда a: array of TYPE;, сколько тогда памяти выделяется?


 
Фэ ©   (2002-01-22 00:24) [7]

SetLength(A,10); // вот здесь и возникнет размер


 
Anatoly Podgoretsky ©   (2002-01-23 08:03) [8]

Landgraph (21.01.02 20:37)
На текущий моиент 4 байта


 
AndrewBee   (2002-01-26 14:59) [9]

Эту проблему я решаю с помощью класса TList.
Следующим образом.

Создаём запись

type
PMyRecord = ^MyRecord;
MyRecord = record
P1 : string;
P2 : integer;
P3 : array [0..10] of string;
..
.. ну и в том же духе
end;

Инициализация динaмического списка

procedure MyProc;
var MyList:TList;
i:integer;
MyRecord1:PMyRecord;
begin
MyList:=TList.Create;
for i:=0 to 100 do
begin
new(MyRecord1); // выделяем память для новой записи
MyRecord1.P1:=StrToInt(i);
MyRecord1.P2:=i;
MyRecord1.P3[0]:="рпарпарао";
..
.. ну и так далее
MyList.Add(MyRecord1);//Добавляем новую запись
end;
end;

Использование динамического списка
например : Поиск какой либо записи

function Find1:integer;
var i:integer;
MyRecord1:PMyRecord;
begin
for i:=0 to MyList.Count-1 do
begin
MyRecord1:=MyList[i];
If MyRecord1.P1=100 then
begin
result:=MyRecord1.P1;
exit;
end;
end;
end;

Только не забудь свой список хлопнуть свой список когда он уже не нужен - MyList.Free;

В TList мона запизнуть всё что угодно :о)))


 
AndrewBee   (2002-01-26 15:05) [10]

Ой :о))) запихнуть а не запизнуть :о))))


 
Anatoly Podgoretsky ©   (2002-01-27 16:28) [11]

AndrewBee (26.01.02 14:59)
И получи хорошую утечку памяти



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

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

Наверх




Память: 0.49 MB
Время: 0.012 c
1-90955
skywalker
2002-03-14 11:36
2002.03.28
Ресурс курсора


3-90755
DeNN
2002-02-28 18:23
2002.03.28
Что за база такая???


1-90869
Leo_
2002-03-17 12:48
2002.03.28
Ping


1-90873
Gold
2002-03-13 19:56
2002.03.28
реестр WIN98


1-90859
Ahd
2002-03-14 23:39
2002.03.28
B сплайны