0

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

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

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

我错过了另一种可能性吗?或者这个容器类没有像其他容器一样提供 Count 成员是否有原因?

谢谢!

4

3 回答 3

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 在范围内。

于 2009-04-23T09:09:33.350 回答
2

没有其他解决方案,无需让计数器与内容保持同步。
它基本上是一个集合的集合。

于 2009-04-23T09:13:45.180 回答
0

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

于 2009-04-23T19:01:57.097 回答