2009-04-23 78 views
0

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

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

这的工作,但它似乎很奇怪我,我必须通过所有迭代水桶找到存储的物品的数量 - 可能经常需要的东西。

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

谢谢!

回答

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

+0

这正是我所做的。我不直接使用TBucketList,而是从它派生出我自己的类。我只是想知道是否还有其他可能性或者没有实现的原因。如果我调用HashTable.Count之类的东西,我不希望它重复可能有数千个桶...... – jpfollenius 2009-04-23 09:19:45

2

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

0

由于您使用自己的派生类,所以只需递增和递减计数器添加删除。为了防万一,你可以包含循环方法作为双重检查。

相关问题