读书人

delphi 动态结构体数组 删除指定元素?

发布时间: 2012-02-27 10:00:22 作者: rapoo

delphi 动态结构体数组 删除指定元素?

本来参考了一个文章 可惜测试报错
http://hi.baidu.com/blackcode/blog/item/4ec300f4b06f9ae77709d748.html



哪种方法 效率高 速度快 不报错 呵呵

我对 move 不是很熟悉

有采用动态链表方法的 最好

[解决办法]
具体情况具体分析。个人的建议是数组加链表结合可能更具效率。如果存在搜索的话,最好能够想办法使用散列存储。
[解决办法]
去看VCL 里LIST的源码
[解决办法]
下面是TList 的删除方法,改一下就行了:
procedure TList.Delete(Index: Integer);
var
Temp: Pointer;
begin
if (Index < 0) or (Index >= FCount) then
Error(@SListIndexError, Index);
Temp := Items[Index];
Dec(FCount);
if Index < FCount then
System.Move(FList^[Index + 1], FList^[Index],
(FCount - Index) * SizeOf(Pointer));
if Temp <> nil then
Notify(Temp, lnDeleted);
end;

不过我觉得你还不如把你的数组改用TList,把你的结构体声明成指针就行了

[解决办法]
这种 record 中有 string 的直接 Move 就等着内存泄露吧

[解决办法]
-_- 简单安全点还是直接FOR一次好了。如果不是很大量数据移动,也不会慢到去哪,这样就不用为了那么一丁点的效率给自己增加那么多的技术风险了

读书人网 >.NET

热点推荐