Текущий архив: 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.48 MB
Время: 0.037 c