代码之家  ›  专栏  ›  技术社区  ›  jpfollenius Rob Kennedy

存储在存储桶列表中的项目数

  •  0
  • jpfollenius Rob Kennedy  · 技术社区  · 15 年前

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

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

    这确实有效,但在我看来很奇怪,我必须遍历所有的bucket来查找存储的项目数——这可能是非常经常需要的。

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

    谢谢!

    3 回复  |  直到 15 年前
        1
  •  4
  •   Toon Krijthe    15 年前

    图书馆永远都不完整。但是你可以把它们扩展。

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

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

        2
  •  2
  •   user81126    15 年前

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

        3
  •  0
  •   Jim McKeeth    15 年前

    因为您使用自己的派生类,所以只需在 添加 去除 . 为了以防万一,您可以将loop方法包含为双重检查。

    推荐文章