Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.09.2012, 09:36
kemerovo_man kemerovo_man вне форума
Прохожий
 
Регистрация: 06.09.2012
Сообщения: 8
Репутация: 10
По умолчанию Общие операции с массивами разных типов

Здравствуйте, уважаемые форумчане.
Опишу задачу:
есть несколько массивов разных типов, например, массив строк и массив целых чисел

Код:
var 
 integerArray: array of integer;
 stringArray: array of string;

есть общие функции для работы с ними: задать размер массива, добавить новый элемент в массив, удалить элемент массива, отобразить все элементы массива и т.д.

сейчас я это делаю очень тупо:

Код:
procedure setLengthArray(arrayName:string, len:integer);
begin
 if arrayName='integerArray' then setlength(integerArray,len);
 if arrayName='stringArray' then setlength(stringArray,len);
end;

procedure deleteFirst(arrayName:string);
begin
 if arrayName='integerArray' then delete(integerArray[0]);
 if arrayName='stringArray' then delete(stringArray[0]));
end

В общем, если массивов не два а двадцать, код растягивается неимоверно. Обратите внимание, что операции с массивом однотипные и повторяются копипастом...

т.е. Вопрос такой:
как обратиться к массиву, зная его имя... например, передать имя массива в функцию, в которой можно будет делать однотипные операции...

возможно, есть и альтернативные подходы... Надеюсь на помощь.
Ответить с цитированием
  #2  
Старый 06.09.2012, 09:39
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Используй array of variant. Тогда можноо вообще только один массив иметь, анализировать через VarType.
А лучше коллекции использовать.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 06.09.2012, 10:03
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

а зачем вообще так делать (про setLengthArray и deleteFirst)?
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 06.09.2012, 11:54
kemerovo_man kemerovo_man вне форума
Прохожий
 
Регистрация: 06.09.2012
Сообщения: 8
Репутация: 10
По умолчанию

2 NumLock так делать незачем, это абстрактные примеры, иллюстрирующие мое незнание...

2 M.A.D.M.A.N. поподробнее, пожалуйста, лучше с кодом...
Ответить с цитированием
  #5  
Старый 06.09.2012, 12:23
kemerovo_man kemerovo_man вне форума
Прохожий
 
Регистрация: 06.09.2012
Сообщения: 8
Репутация: 10
По умолчанию

по поводу varType он только стандартные типы определяет?

Цитата:
Функция VarType возвращает целое число, представляющее текущий тип данных для Variant переменной VariantVariable.

Этот 16 битный тип данных, разбитый на биты старшего разряда (4 бита) и младшего разряда (12 бит). Биты старшего разряда дают тип мета данных:

varArray: Если Variant содержит массив данных
varByRef: Если Variant косвенно обращается к данным

Биты младшего разряда содержат одно из следующих значений:

varEmpty
varNull
varSmallint
varInteger
varSingle
varDouble
varCurrency
varDate
varOleStr
varDispatch
varError
varBoolean
varVariant
varUnknown
varShortInt
varByte
varWord
varLongWord
varInt64
varStrArg
varString
varAny

Это не совсем то, что нужно...
В примерах я говорил о типах целое и строка для простоты, на самом деле у меня описаны классы объектов. Массивы типа: массив стульев, массив столов и т.д. массивы объектов... такой подход с variant прокатит?
Ответить с цитированием
  #6  
Старый 06.09.2012, 12:37
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

У тебя там будут экземпляры классов? В принципе array of TObject пойдет.
А вообще, для хранения классов есть листики спецовые, TObjectList называется.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 06.09.2012, 13:05
kemerovo_man kemerovo_man вне форума
Прохожий
 
Регистрация: 06.09.2012
Сообщения: 8
Репутация: 10
По умолчанию

2 M.A.D.M.A.N. TObjectList кажется то, что нужно...
можно все экземпляры классов засунуть в один список, через свойство
list.Items[i].ClassType.ClassName определять их тип... буду много думать... спасибо.
Ответить с цитированием
  #8  
Старый 06.09.2012, 13:22
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

ClassName - это класс функция, она может быть вызвана как с объекта, так и с класса, не обязательно делать так: "ClassType.ClassName".
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:39.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025