Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.028 c
6-1092898751
PL
2004-08-19 10:59
2004.10.24
Еще раз о пересылке файлов


4-1095617016
Dolphni1
2004-09-19 22:03
2004.10.24
desktop themes changes


1-1097143505
Unknown user
2004-10-07 14:05
2004.10.24
TMethod


14-1096618139
Sergo
2004-10-01 12:08
2004.10.24
Я защитил кандидатскую!


8-1085250190
Forelli
2004-05-22 22:23
2004.10.24
Как вставить Flash ролик в Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский