powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / array of trecord или можно через TDictionary ?
19 сообщений из 19, страница 1 из 1
array of trecord или можно через TDictionary ?
    #39816985
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую массив записей, но не нравится, что надо задавать длину и т.д., хотел перейти на TDictionary, но тогда придется отказаться от записей (record) и для каждой записи TDictionary создавать экземпляр класса.

Правильно я понимаю? Если да, то что лучше использовать в таких случаях? Особенно интересует читабельность кода и авто освобождение памяти после удаления объекта всех записей. Скорость заботит не очень, т.к. записей около 10шт.

Для наглядности:

Код: pascal
1.
2.
3.
4.
5.
TMyRecord = record
  f1: string;
  f2: integer;
  f3: currency;
end;



Код: pascal
1.
MyArray: array of TMyRecord;
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817000
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox,

TDictionary работает с record
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817007
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как это можно реализовать, если

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var
mr: TMyRecord;
...
.Add(i, KKTOplat);

base:= TDictionary<Integer, TMyRecord>.Create;

base.add(1,mr);
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817010
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как это сделать, если повторное добавление приводит к ошибки дублирования, что видимо верно, т.к. ссылка на этот же объект...

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var
  mr: TMyRecord;
...

base:= TDictionary<Integer, TMyRecord>.Create;

base.add(1,mr);
base.add(2,mr);
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817011
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может как-то так?

Код: pascal
1.
base:= TDictionary<Integer, TMyRecord(тут сразу как-то значения)>.Create;
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817049
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox,

Для записи подобного типа необходимо указать для словаря компарер и хэшер
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817056
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger,

Зачем? У него ключ integer
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817078
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antoxно не нравится, что надо задавать длину и т.д., хотел перейти на TDictionary,Может вам нужен TList<TMyRecord>?
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817081
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antoxА как это сделать, если повторное добавление приводит к ошибки дублирования,Приведенный код не будет генерировать никаких ошибок дублирования
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817108
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_antoxА как это сделать, если повторное добавление приводит к ошибки дублирования,Приведенный код не будет генерировать никаких ошибок дублирования

Какой именно?

Код: pascal
1.
TList<TMyRecord>?



Этот?
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817119
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
var
 recs : array of TMyRecord;
 mr   : TMyRecord;
begin
 recs := recs + [mr];
end;
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817122
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
Код: pascal
1.
2.
3.
4.
5.
6.
var
 recs : array of TMyRecord;
 mr   : TMyRecord;
begin
 recs := recs + [mr];
end;

Кстати, это копированием не будет?
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817126
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatКстати, это копированием не будет?
Хз, я такими новомодностями не пользуюсь :)
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817133
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatКстати, это копированием не будет?
Полного копирования не будет. Будет увеличен размер приёмника на количество новых элементов и скопируются только они. Единственный минус этого решения - одноэлементный динамический массив.
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817137
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antox_Vasilisk_Приведенный код не будет генерировать никаких ошибок дублирования
Какой именно?Этот
antox
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var
  mr: TMyRecord;
...

base:= TDictionary<Integer, TMyRecord>.Create;

base.add(1,mr);
base.add(2,mr);
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817139
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyПолного копирования не будет.Если будет место куда расширяться
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817141
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Если будет место куда расширяться
Это понятно. Тольно тоже самое относится и к дельфийским спискам и к словарям. Речь была о том, что каждый раз пересоздаваться массив не будет.
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817144
antox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_antoxпропущено...

Какой именно?Этот
antox
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var
  mr: TMyRecord;
...

base:= TDictionary<Integer, TMyRecord>.Create;

base.add(1,mr);
base.add(2,mr);



Спасибо, просто запутался !!!

Кутил в цикле
Код: pascal
1.
base.add(i,mr);

, а i из цикла убрал, поэтому i не менялась и соответственно дубль
...
Рейтинг: 0 / 0
array of trecord или можно через TDictionary ?
    #39817746
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovЗачем? У него ключ integer Когда я начинал писать, видел только первый пост
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / array of trecord или можно через TDictionary ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]