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

Вниз

Многомерный массив   Найти похожие ветки 

 
Schummi   (2004-10-05 09:04) [0]

Уважаемые Мастера!
Помогите, пожалуйста с таким вопросом: как во время выполнения программы создать многомерный массив? Глубина "многомерности" определяется во время работы.
Заранее спасибо!


 
MBo ©   (2004-10-05 09:07) [1]

Никак. Тип с указанием количества размерностей должен быть определен на этапе компиляции.
Но ничего не мешает сэмулировать многомерный массив с помощью динамического одномерного - доступ для удобства можно обернуть в класс.


 
Fay ©   (2004-10-05 09:14) [2]

GetMem.


 
MBo ©   (2004-10-05 09:23) [3]

>доступ для удобства можно обернуть в класс.
про это я, пожалуй, загнул.


 
Fay ©   (2004-10-05 09:28) [4]

А вот и нет, не загнул. Очень даже можно. Просто не всем это покажется удобным_&_быстрым 8)


 
MBo ©   (2004-10-05 10:04) [5]

>Fay ©   (05.10.04 09:28) [4]
Думалось о доступе не через методы, а через свойство - но так, похоже не выйдет.


 
Romkin ©   (2004-10-05 11:01) [6]

MBo ©  (05.10.04 10:04) [5] Выйдет скорее всего. Через open array :)


 
Sandman25 ©   (2004-10-05 11:04) [7]

VarArrayCreate


 
TUser ©   (2004-10-05 11:08) [8]

Могу покопаться дома - у меня валялся модуль для такого дела. Индексы для произвольной "глубины многомерности" передаются, как динамический одномерный массив.


 
MBo ©   (2004-10-05 12:07) [9]

>Romkin ©   (05.10.04 11:01) [6]
Об этом я и думал - но индекс свойства - открытый массив - не поддерживается.


 
Sandman25 ©   (2004-10-05 12:12) [10]

var
 V: Variant;
 Ind: array of Integer;
begin
 SetLength(Ind, 4);
 Ind[0] := 0;
 Ind[1] := 2;
 Ind[2] := 0;
 Ind[3] := 3;
 V := VarArrayCreate(Ind, varInteger);
 SetLength(Ind, 2);
 Ind[0] := 2;
 Ind[1] := 1;
 VarArrayPut(V, 17, Ind);
 ShowMessage(VarArrayGet(V, Ind));


 
Fay ©   (2004-10-05 12:15) [11]

2 MBo ©   (05.10.04 12:07) [9]
Даже "через указатели" никак?


 
Romkin ©   (2004-10-05 12:16) [12]

MBo ©  (05.10.04 12:07) [9] Упс... Не знал. Но подозревал :))
Действительно, довольно странно должно выглядеть MyArr.Elem[[1,1,2]] :))


 
atruhin ©   (2004-10-05 16:16) [13]

С вариантами без проблем. Но медленно.


 
Рыба ©   (2004-10-05 23:51) [14]

Вот к примеру двумерный дин. массив:

var M: array of array of Integer;
   i: Integer;
begin
 SetLength(M, XL);
 for i := 0 to High(M) - 1 do
   SetLength(M[i], YL);
end;


будет тоже самое, что и
var M: array [0..XL-1, 0..YL-1] of Integer;


 
Sandman25 ©   (2004-10-06 09:01) [15]

[14] Рыба ©   (05.10.04 23:51)

У SetLength может быть больше 2 параметров.
SetLength(M, XL, YL)


 
TUser ©   (2004-10-06 10:53) [16]


> Могу покопаться дома

Извини, не покопался. Вчера было весело, а сегодня с утра голова не думала о модулях и произвольной степени многомерности. Попроси на мыло - завтра вышлю, если надо.


 
Schummi   (2004-10-06 22:19) [17]

у меня ещё идея есть такая создать массив pointer"ов и указывать как его элементы либо опять указатели на эти массивы поинтеров (пока не реализуется многомерность), а потом в конце указывать вместо поинтеров PChar.


 
Mihey_temporary ©   (2004-10-06 23:34) [18]


> Рыба ©   (05.10.04 23:51) [14]


Не решает проблему run-time многомерности.


 
Palladin ©   (2004-10-06 23:40) [19]

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


 
Palladin ©   (2004-10-06 23:42) [20]


> Тип с указанием количества размерностей должен быть определен
> на этапе компиляции

С типом согласен, хотя ничто не мешает использовать указатели на Variant, с количеством размерностей только на этапе компиляции не согласен...



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

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

Наверх




Память: 0.51 MB
Время: 0.026 c
1-1097055459
Hereticsoul
2004-10-06 13:37
2004.10.24
Вообще ничего не понимаю что происходит со значением переменной.


14-1096891606
Guest
2004-10-04 16:06
2004.10.24
Перестал пахать комп, пень первый 166 MHz


14-1096940811
Думкин
2004-10-05 05:46
2004.10.24
С днем рождения! 5 октября


1-1096192293
Koala
2004-09-26 13:51
2004.10.24
Округление функция Round


6-1092898751
PL
2004-08-19 10:59
2004.10.24
Еще раз о пересылке файлов