|
|
|
Как пользовать TEqualityComparer для TDictionary?
|
|||
|---|---|---|---|
|
#18+
Добрый день! Суть такая, ключ бы мне для TDictionary из двух ShortString. Можно, конечно, две строки объединить просто в одну и радоваться, но для общего развития, так сказать, хочется разобраться. Нашел на просторах, наваял Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. Что я делаю не так? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 08:26:59 |
|
||
|
Как пользовать TEqualityComparer для TDictionary?
|
|||
|---|---|---|---|
|
#18+
Надо примерно так: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 08:45:47 |
|
||
|
Как пользовать TEqualityComparer для TDictionary?
|
|||
|---|---|---|---|
|
#18+
Devillio, В конструктор TDictionary надо передать экземпляр компаратора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 09:19:44 |
|
||
|
Как пользовать TEqualityComparer для TDictionary?
|
|||
|---|---|---|---|
|
#18+
Попробовал так: MyTest := TDictionary<TMyNames,Integer>.Create(TMyNamesComparer.Create); Ничего не изменилось, второй ключ создается, warning не появляется. Может еще что-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 09:24:05 |
|
||
|
Как пользовать TEqualityComparer для TDictionary?
|
|||
|---|---|---|---|
|
#18+
Devillio, Второй Add у тебя должен вызвать эксепшн Трейси, почему этого не произошло. GetBucketIndex смотри ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 09:43:59 |
|
||
|
Как пользовать TEqualityComparer для TDictionary?
|
|||
|---|---|---|---|
|
#18+
DevillioMyTest := TDictionary<TMyNames,Integer>.Create(TMyNamesComparer.Create);Это прямая утечка памяти. Экземпляр TMyNamesComparer никогда не освободится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 13:07:00 |
|
||
|
Как пользовать TEqualityComparer для TDictionary?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Это прямая утечка памяти. Экземпляр TMyNamesComparer никогда не освободится Освободится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 13:46:24 |
|
||
|
Как пользовать TEqualityComparer для TDictionary?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_DevillioMyTest := TDictionary<TMyNames,Integer>.Create(TMyNamesComparer.Create);Это прямая утечка памяти. Экземпляр TMyNamesComparer никогда не освободитсяТам интерфейс через const передается, значит счетчик ссылок не инкрементируется. Поэтому - освободится на выходе из вызывающей функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 14:19:52 |
|
||
|
Как пользовать TEqualityComparer для TDictionary?
|
|||
|---|---|---|---|
|
#18+
КвейдТам интерфейс через const передается, значит счетчик ссылок не инкрементируется. Поэтому - освободится на выходе из вызывающей функции Он освободится не поэтому. Для вызывающей функции это и не интерфейс вовсе, а объект. Счётчик начнёт работать после сохранения компарера в конструкторе. Если бы сохранения небыло то это действительно была бы утечка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 14:57:45 |
|
||
|
Как пользовать TEqualityComparer для TDictionary?
|
|||
|---|---|---|---|
|
#18+
Точно, я неверно расписал поведение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 15:13:41 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39486215&tid=2042042]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
166ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 461ms |

| 0 / 0 |
