【问题标题】:Number of items stored in Bucket list存储在 Bucket 列表中的项目数
【发布时间】:2009-04-23 08:57:25
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

    标签: delphi containers tbucketlist


    【解决方案1】:

    库永远不会完整。但是你可以扩展它们。

    如果你经常需要这个值,你可以为此编写一个类助手。

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

    【讨论】:

    • 这正是我所做的。我不直接使用 TBucketList ,而是从中派生出我自己的类。我只是想知道是否还有其他可能性或任何未实施的原因。如果我调用 HashTable.Count 之类的东西,我不希望它会遍历数千个桶......
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-11-02
        • 1970-01-01
        • 1970-01-01
        • 2021-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-05
        • 2010-11-09
        相关资源
        最近更新 更多