powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Количество элементов в TDictionary
17 сообщений из 17, страница 1 из 1
Количество элементов в TDictionary
    #39801618
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему-то в словаре типа TDictionary<integer, Boolean> количество элементов на три больше. А вот count показывает правильно.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
procedure TForm1.InitButtonsDictionary;
Var
 i: integer;
 DirSelectedButtons: TDictionary<Integer, Boolean>;
begin
  if Not Assigned(DirSelectedButtons) then
    DirSelectedButtons := TDictionary<integer, Boolean>.Create
  else
    DirSelectedButtons.Clear;

  for i := 1 to constButtonsCount do
    DirSelectedButtons.add(i, False);
end;



так и должно быть?

Даже сразу после первой итерации видно, что там 4 элемента, хотя и Count = 1.
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39801622
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да.
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39801624
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например есть статья почему реализация в Delphi оставляет желать лучшего..
https://habr.com/ru/post/282902
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39801627
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок, спасибо :(
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39801632
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле не все так печально... Если словарь будет небольшой, то подойдет и стандартная реализация...
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39801635
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще, на будущее....
Допустим, нужен быстрый поиск по списку, т.к. есть отрисовка ячеек в большой таблице? Но количество элементов тоже небольшое: 5-10-50...
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39801641
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11А вообще, на будущее....
Допустим, нужен быстрый поиск по списку, т.к. есть отрисовка ячеек в большой таблице? Но количество элементов тоже небольшое: 5-10-50...

https://www.delphitools.info/2015/03/16/string-lookup-hash-sorted-or-unsorted/
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39801647
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey, это же 2015 год. В последних версиях TDictionary увеличили (вроде бы) быстродействие, если я ничего не путаю
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39801651
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11, Capacity и Count разные вещи. Еще больше удивишься, когда в словаре будет несколько миллионов элементов и словарю в очередной раз придется увеличивать размерность.
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39801706
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbВ последних версиях TDictionary увеличили (вроде бы) быстродействие, если я ничего не путаю
На моих тестах разницы между быстродействием словарей в XE6 и 10.3 нет никакой. На какой версии тестировался словарь в статье я не знаю.
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39801794
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TDictionary - очень быстрая штука. 1000000 элементов у меня добавляются (с предварительной проверкой ContainsKey) за 500 мс.
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39801852
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer, а тип какой? <string, integer>? А попробуй ключ как класс из 10 простых типов
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39801908
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbDmSer, а тип какой? <string, integer>? А попробуй ключ как класс из 10 простых типов

Пробовал <string, integer> и <Integer, Boolean>. Класс в качестве ключа не пробовал. В чём смысл?
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39801989
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer, в сравнении, в хэшировании
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39803614
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbDmSer, в сравнении, в хэшировании

Разницы в скорости не заметил. Хэширование - это вызов метода TObject.GetHashCode - т.е. возвращает указатель (для 32 битов).
Кстати, TDictionary не особо удобен в таком варианте использования (когда ключ - объект). Сам он такие ключи не чистит, а кто это должен делать - не ясно. Обработчик OnKeyNotify навешивать? Так и он объявлен по старинке - как procedure of object, а не анонимная процедура, хотя в то время вроде уже и анонимные процедуры можно было использовать.
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39803628
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

TObjectDictionary
...
Рейтинг: 0 / 0
Количество элементов в TDictionary
    #39803629
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)DmSer,

TObjectDictionary

Точно!
Сам же пару месяцев назад с ним разбирался :))
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Количество элементов в TDictionary
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]