Количество элементов, хранящихся в списке Bucket - PullRequest
0 голосов
/ 23 апреля 2009

Мне было интересно, как получить количество элементов, хранящихся в TBucketList. Насколько я вижу, доступно только количество сегментов и массив блоков, поэтому все, что я могу придумать, это

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

Это работает, но мне кажется странным, что мне приходится перебирать все сегменты, чтобы найти количество сохраненных элементов - то, что, вероятно, нужно очень часто.

Я упускаю другую возможность? Или есть причина, по которой этот контейнерный класс не предоставляет члена Count, как другие контейнеры?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 23 апреля 2009

Библиотеки никогда не заканчиваются. Но вы можете расширить их.

Если вам часто нужно это значение, вы можете написать для этого помощника класса.

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 голосов
/ 23 апреля 2009

Нет другого решения без синхронизации счетчика с контентом.
В основном это коллекция коллекций.

0 голосов
/ 23 апреля 2009

Поскольку вы используете свой собственный производный класс, просто увеличьте и уменьшите счетчик на Добавить и Удалить . Вы можете включить метод цикла как двойную проверку на всякий случай.

...