存储在Bucket列表中的项目数

时间:2009-04-23 08:57:25

标签: delphi containers tbucketlist

我想知道如何获取存储在TBucketList中的项目数。据我所知,只有桶的数量和桶阵列可用,所以我能想到的是

Count := 0;
for I := 0 to BucketList.BucketCount - 1 do
  Inc (Count, BucketList.Buckets [I].Count);

这确实有效,但对我来说似乎很奇怪,我必须遍历所有存储桶才能找到存储的项目数量 - 这可能是经常需要的。

我错过了另一种可能吗?或者,为什么这个容器类不像其他容器那样提供Count成员?

谢谢!

3 个答案:

答案 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)

由于您使用自己的派生类,因此只需在添加删除上增加和减少计数器。为了以防万一,您可以将循环方法包括为双重检查。