Так всё-таки? Останутся ли 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