Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / array of trecord или можно через TDictionary ? / 19 сообщений из 19, страница 1 из 1
23.05.2019, 11:51
    #39816985
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
array of trecord или можно через TDictionary ?
Использую массив записей, но не нравится, что надо задавать длину и т.д., хотел перейти на 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
23.05.2019, 12:14
    #39817000
asviridenkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
array of trecord или можно через TDictionary ?
antox,

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

Код: 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
23.05.2019, 12:26
    #39817010
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
array of trecord или можно через TDictionary ?
А как это сделать, если повторное добавление приводит к ошибки дублирования, что видимо верно, т.к. ссылка на этот же объект...

Код: 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
23.05.2019, 12:28
    #39817011
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
array of trecord или можно через TDictionary ?
Может как-то так?

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

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

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

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

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



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

Кстати, это копированием не будет?
...
Рейтинг: 0 / 0
23.05.2019, 14:15
    #39817126
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
array of trecord или можно через TDictionary ?
rgreatКстати, это копированием не будет?
Хз, я такими новомодностями не пользуюсь :)
...
Рейтинг: 0 / 0
23.05.2019, 14:24
    #39817133
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
array of trecord или можно через TDictionary ?
rgreatКстати, это копированием не будет?
Полного копирования не будет. Будет увеличен размер приёмника на количество новых элементов и скопируются только они. Единственный минус этого решения - одноэлементный динамический массив.
...
Рейтинг: 0 / 0
23.05.2019, 14:27
    #39817137
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
array of trecord или можно через TDictionary ?
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
23.05.2019, 14:34
    #39817139
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
array of trecord или можно через TDictionary ?
Kazantsev AlexeyПолного копирования не будет.Если будет место куда расширяться
...
Рейтинг: 0 / 0
23.05.2019, 14:38
    #39817141
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
array of trecord или можно через TDictionary ?
_Vasilisk_Если будет место куда расширяться
Это понятно. Тольно тоже самое относится и к дельфийским спискам и к словарям. Речь была о том, что каждый раз пересоздаваться массив не будет.
...
Рейтинг: 0 / 0
23.05.2019, 14:40
    #39817144
antox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
array of trecord или можно через TDictionary ?
_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
24.05.2019, 13:32
    #39817746
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
array of trecord или можно через TDictionary ?
asviridenkovЗачем? У него ключ integer Когда я начинал писать, видел только первый пост
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / array of trecord или можно через TDictionary ? / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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