gpt4 book ai didi

delphi - 如何更改 Delphi TDictionary 或 TObjectDictionary 中的键值?

转载 作者:行者123 更新时间:2023-12-03 14:42:50 30 4
gpt4 key购买 nike

我可以更改 TDictionary 中的键而不更改值吗?

为了解释一下,我使用的是 TObjectDictionary,它派生自 Delphi XE Generics.Collections 单元中的 TDictionary。这一切都很好,除了我还需要能够更改存储的对象的键值。

我的第一次尝试如下:

MyObject := MyDictionary.Items[OldKeyValue];
MyDictionary.Remove(OldKeyValue);
MyDictionary.Add(NewKeyValue, MyObject);

问题在于,Remove() 会导致对象被释放。我尝试先执行 AddOrSetValue 将值更改为 nil,但这也是 Free 对象。因为我已经告诉字典它拥有它们,所以这很公平。尽管 TObjectDictonary 中没有额外的函数可以在没有 Free 的情况下删除,因此我尝试在不更改值的情况下更改字典中的键。然而,我在 Delphi XE 帮助中看不到任何看起来可以做到这一点的东西。这有可能吗?如果没有,我将重新使用字典并自行释放它。

最佳答案

调用TDictionary<TKey,TValue>.ExtractPair(const Key: TKey)您将获得 key 和值,但该值不会被释放。然后您可以使用不同的 key 将其添加回来。

ExtractPair()方法返回 TPair<TKey,TValue>这只是一个包含键及其关联值的记录。

代码可能如下所示:

type
TMyKey = string;
TMyValue = TMyObject;

procedure ChangeKey(dict: TDictionary<TMyKey,TMyValue>; OldKey, NewKey: TMyKey);
var
Pair: TPair<TMyKey,TMyValue>;
begin
Pair := dict.ExtractPair(OldKey);
dict.Add(NewKey, Pair.Value);
end;

关于delphi - 如何更改 Delphi TDictionary 或 TObjectDictionary 中的键值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5595797/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com