Показать сообщение отдельно
  #8  
Старый 24.05.2023, 11:37
bubaeshka bubaeshka вне форума
Прохожий
 
Регистрация: 20.02.2016
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Так всё-таки? Останутся ли TPair в памяти, если его параметры - простые типы? Сейчас столкнулся с проблемой. Компилятор считает TPair - константой. Не даёт изменять значение Value в списке.

Код:
zz[k].Value:=zz[k].Value-1;

При секции в Var следующего вида

Код:
zz,xx:TList<TPair<integer,integer>>;

Выдаёт ошибку: E2064 Left side cannot be assigned to

Мне очень удобно работать с TPair, как с простым типом. Если он действительно простой тип. В прошлой версии программы, я использовал вспомогательный класс. С простым типом, типа записи, если действительно не требуется очистки памяти, мне работать проще и быстрее. И мне не надо там методов, мне просто нужно хранилище оперативных данных, я мог вообще воспользоваться массивом обычным, но мне надо хранить кроме значения, ещё и ключ, к которому он относится.

Это я видел:
Код:
TPair<TKey,TValue> = record
  Key: TKey;
  Value: TValue;
  constructor Create(const AKey: TKey; const AValue: TValue);
end;

...блин. Вот же ответ то. Под носом. Ну, под носом труднее всего найти... Это очень плохо, что TPair сделана константой.... Удобный тип то, был...

Я конечно извернулся, удалением элемента и вставкой нового, но выглядит это как какой-то костыль....

Цитата:
Ну тогда для тебя плохая новость - да, при очистке TList<TPair<...>> данные останутся в памяти. Можно схитрить и просто обернуть TPair в класс и хранить уже его объекты в TObjectList.
Про анонимные функции - по сути это синтаксический сахар, без них вполне можно обойтись, более того, если тебе одна и та же функция нужно в нескольких местах, то как раз лучше обойтись без анонимных фнункций нежели копировать один и тот же код в нескольких местах.

Не хочу я класс, хочу запись. Вот здесь натолкнулся на то, что записи вроде как сами чистятся: https://www.cyberforum.ru/delphi-beg...ead952981.html
Ответить с цитированием