Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Многомерный массив [D5, Win95/98]


Schummi ©   (2004-10-05 09:04:00) 

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


Palladin   (2004-10-06 23:42:00) [1]


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

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


Palladin   (2004-10-06 23:40:00) [2]

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


Mihey_temporary   (2004-10-06 23:34:00) [3]


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


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


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

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


TUser   (2004-10-06 10:53:00) [5]


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

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


Sandman25   (2004-10-06 09:01:00) [6]

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

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


Рыба   (2004-10-05 23:51:00) [7]

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

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;


atruhin   (2004-10-05 16:16:00) [8]

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


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

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


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

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


Sandman25   (2004-10-05 12:12:00) [11]

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));


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

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


TUser   (2004-10-05 11:08:00) [13]

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


Sandman25   (2004-10-05 11:04:00) [14]

VarArrayCreate


Romkin   (2004-10-05 11:01:00) [15]

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


MBo   (2004-10-05 10:04:00) [16]

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


Fay   (2004-10-05 09:28:00) [17]

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


MBo   (2004-10-05 09:23:00) [18]

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


Fay   (2004-10-05 09:14:00) [19]

GetMem.


MBo   (2004-10-05 09:07:00) [20]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо