Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.022 c
11-1081970724
Михаил
2004-04-14 23:25
2004.10.24
Работа с датой и временем


14-1096736432
ArMellon
2004-10-02 21:00
2004.10.24
Заканчиваю работу над прогой и хотелось бы


3-1096178226
ilya}}
2004-09-26 09:57
2004.10.24
Нужны ссылки на статьи по базам данных


1-1097147871
lightix
2004-10-07 15:17
2004.10.24
Убить все приложения текущего юзера


14-1096545934
pasha_golub
2004-09-30 16:05
2004.10.24
TheBat3.0




   Наверх