Главная страница
    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.056 c
1-1097177335
Wish
2004-10-07 23:28
2004.10.24
TValueListEditor


1-1097563467
aleshap
2004-10-12 10:44
2004.10.24
Возможно ли в Delphi косвенно выполнить команду


1-1097317177
GanibalLector
2004-10-09 14:19
2004.10.24
Word


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


3-1096054177
tormoz
2004-09-24 23:29
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский