如何更新 TList中的数据?

发布于 2024-10-17 02:57:45 字数 368 浏览 1 评论 0原文

我有这个记录(结构):

type
    THexData = record            
            Address : Cardinal;
            DataLen : Cardinal;
            Data    : string;    
    end;

我已经声明了这个列表:

HexDataList: TList<THexData>;

我已经用一些数据填充了列表。现在我想扫描 ListHexData,有时会更新 HexDataList 内的记录元素。

是否可以?我该怎么办?

I have this record (structure):

type
    THexData = record            
            Address : Cardinal;
            DataLen : Cardinal;
            Data    : string;    
    end;

And I've declared this list:

HexDataList: TList<THexData>;

I've filled the list with some data. Now I'd like scan ListHexData and sometimes update a element of a record inside HexDataList.

Is it possible? How can I do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

稀香 2024-10-24 02:57:45
var
  Item: THexData;
... 
for i := 0 to HexDataList.Count-1 do begin
  Item := HexDataList[i];
  //update Item
  HexDataList[i] := Item;
end;

绑定是您想要就地修改 HexDataList[i],但您不能。当我使用保存记录的 TList 时,我实际上对 TList 进行了子类化,并将 Items 属性替换为返回指向该项目的指针,而不是该项目的副本。这允许就地修改。

编辑

再次查看我的代码,我意识到我实际上并没有对 TList 进行子类化,因为该类太私有,无法提取指向底层数据的指针。这或许是一个不错的决定。我实际上所做的是实现我自己的通用列表类,这使我可以在需要时自由返回指向记录的指针。

var
  Item: THexData;
... 
for i := 0 to HexDataList.Count-1 do begin
  Item := HexDataList[i];
  //update Item
  HexDataList[i] := Item;
end;

The bind is that you would like to modify HexDataList[i] in place, but you can't. When I'm working with a TList<T> that holds records I actually sub-class TList<T> and replace the Items property with one that returns a pointer to the item, rather than a copy of the item. That allows for inplace modification.

EDIT

Looking at my code again I realise that I don't actually sub-class TList<T> because it the class is too private to extract pointers to the underlying data. That's probably a good decision. What I actually do is implement my own generic list class and that allows me the freedom to return pointers to records if needed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文