我想知道如何获取存储在TBucketList中的项目数。据我所知,只有桶的数量和桶阵列可用,所以我能想到的是
Count := 0;
for I := 0 to BucketList.BucketCount - 1 do
Inc (Count, BucketList.Buckets [I].Count);
这确实有效,但对我来说似乎很奇怪,我必须遍历所有存储桶才能找到存储的项目数量 - 这可能是经常需要的。
我错过了另一种可能吗?或者,为什么这个容器类不像其他容器那样提供Count成员?
谢谢!
答案 0 :(得分:4)
图书馆永远不会完整。但你可以扩展它们。
如果您经常需要此值,可以为此编写一个类助手。
TBucketListHelper = class helper for TBucketList
function GetCount: Integer;
end;
function TBucketListHelper.GetCount: Integer;
var
i : Integer;
begin
Result := 0;
for I := 0 to BucketCount - 1 do
Inc (Result, Buckets [I].Count);
end;
您现在可以使用:
BucketList.GetCount
如果TBucketListHelper在范围内。
答案 1 :(得分:2)
没有其他解决方案,无需让计数器与内容保持同步 它基本上是一个集合的集合。
答案 2 :(得分:0)
由于您使用自己的派生类,因此只需在添加和删除上增加和减少计数器。为了以防万一,您可以将循环方法包括为双重检查。