Главная страница
    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.48 MB
Время: 0.039 c
1-1097126943
П7
2004-10-07 09:29
2004.10.24
Эмуляция "незапуска" программы


1-1097495514
IceT
2004-10-11 15:51
2004.10.24
RecordToVariant и обратно


1-1096810509
TeNY
2004-10-03 17:35
2004.10.24
Как можно определить момент выхода курсора мыши из компонента


10-1050326805
Help!!!!!
2003-04-14 17:26
2004.10.24
Параметры Name Service


1-1097174259
RedDragon
2004-10-07 22:37
2004.10.24
Как проверить папку на наличие файл с определённым именем........





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский