


Массив в Delphi
Пишу программу, рассчитывающую по простому алгоритму простые числа и добавляющую их в список. Доходило до того, что в списке находилось около 10 000 найденных простых чисел. При этом для вывода использовал обычный TMemo, из которого список чисел мог копировать куда угодно. Хочу немного модернизировать алгоритм, и для его ускорения хорошо бы воспользоваться массивом, чтобы избавиться от постоянной конвертации числа в строку для занесения в TMemo. Но я не могу сказать, какого размера должен быть массив, т.к. могу внести туда и 3 числа, и 3 000. Как я могу использовать массив с неопределенным размером?
Для работы с ним мне достаточно знать только индекс требуемого элемента, длина массива в работе алгоритма фигурировать не будет
Возможно, массивами тут не обойтись, подтолкните в сторону правильного решения проблемы
В Delphi есть класс TList туда можно запихивать что угодно и сколько угодно.
TList правда хранит указатели, но ни кто не мешает переписать соответствующие процедуры под целые числа и даже добавить процедуру генерации необходимого к-ва простых чисел
Динамический массив конечно использовать можно, но все равно нужно зарание определять его размерность
Вам надо применять TList, правда он не удобен тем что не типизирован.
В основе всех классов коллекций лежит массив, и при нехватке места он автоматически увеличивается до бОльших размеров.
Скажем, в C# есть List<t> способный хранить коллекцию данных любого типа без необходимости работы с указателями. Хотя принцип меняется автоматически - для объектов применяются указатели на них, а для чисел применяются просто значения без ссылок.
Кроме того в C# есть Stack<t>, Queue<t>, ObservableCollection<t>, Dictionary<t,k> и их аналоги. Каждая коллекция реализует обобщённые интерфейсы, таким образом например можно с разными коллекциями работать прозрачно через тот же IList интерфейс, или через типизированный IList<t>.
Почитайте про коллекции в Delphi, скорее всего лучше ознакомиться со всеми вариантами. Должны быть альтернативы какие я описал применительно к C#.
я использую компонент Dev Exspress - TdxMemData (DB в памяти) создаю поле типа Float - и толкай числа. работай как обычной базой. Без проблем
Можно по записям перемещатся..
Динавический массив, в С++ вектор это тоже самое
type Name = array[Index type|Ordinal..Ordinal {,...}] of Base type; // Статический массив
2 type Name = array of {array of ...} Base type; // Динамический массив
3 Name : array of {array of ...} const; // Открытый различный массив
Name : Array type; // Открытый динамический массив
[ссылка заблокирована по решению администрации проекта]
Можно сделать массив массивов и если первый массив забит до отказа переключаешся на 2-й и тд
честно не знаю есть ли такое понятие в delphi (но думаю есть) , в с++ это реализуется векторами