![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Доброго времени суток всем!
Вот возник такой вопрос: реально ли в делфи создавать массивы, у которых индексом будет не цифра, а слово? Так, например в php есть возможность работать с массивами типа $arr['one'] Так же есть вопрос немного иного плана: подскажите пожалуйста, как создавать массивы во время выполнения программы? Допустим есть у меня массив массивов и нужно в него в процессе выполнения добавлять новые, созданные в зависимости от действий пользователя. Возможно ли это и как в такой случае под них правильно выделять память? Заранее благодарю за любые советы. |
#2
|
||||
|
||||
![]() Цитата:
Цитата:
Код:
var m: array of Integer; ... begin SetLength(m, 100); // Задать размер этого массива равный 100 элементов |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
VarvarNet (14.12.2012)
|
#3
|
|||
|
|||
![]() Благодарю за ответ.
Но со вторым вопросом вы меня немного не поняли. Вот есть у нас функция некая: Код:
function bla(): bool; var arr1: array of integer; begin // работаем работаем и тут понимаем, что нам бы ещё один массивчик // и каким-то волшебным образом его создаём не в блоке var а уже в процессе работы. end; |
#4
|
||||
|
||||
![]() Цитата:
p.s. Это что, в php есть возможность создавать такие массивы? И в каких случаях могут быть полезны такого рода массивы? |
#5
|
|||
|
|||
![]() Цитата:
полезным... ну вот в процессе работы появляются некие значения, которым соответствуют по несколько других параметров. Создаю я массив с именем равным этому значению и в него записываю соответствующие ему параметры. как-то так. Я уже понял, что всё это как-то слишком абстрактно и проще создать свой класс и динамический массив этого класса, просто интересно было, реально ли это вообще. |
#6
|
||||
|
||||
![]() Чтобы индексом было имя - стоит подумать. Подумать раз 50, прежде чем такое реализовывать.
Если индекс - число, то i - элемент массива получается так: Код:
element := (array + i * sizeof(element))^; А если индекс - произвольные данные, то единственный способ использовать таков (на псевдокоде): Код:
для каждого элемента из массива проверить если текущий_элемент.индекс = нужный_индекс то element := текущий_элемент По поводу динамического создания массивов: Ничто не мешает сделать 1) Создать массив/список указателей на массивы. Изначально все нули. По мере надобности создается массив и его адрес добавляется в этот массив/список. 2) Если нужно только временное пользование, то просто сделать один указатель на массив, для которого выделять память нужного размера. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 14.12.2012 в 21:13. |
#7
|
|||
|
|||
![]() Цитата:
Можно сделать массив массивов: Код:
arr1: array of array of integer; ///// SetLength (arr1, 1); SetLength (arr1[0], 2); arr1[0][0] := x; arr1[0][1] := y; // а потом решили ещё одну точку запомнить SetLength (arr1, 2); SetLength (arr1[0], 2); arr1[1][0] := x; arr1[1][1] := y; |