Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Как создать словарь с числовыми полями


Автор: CODeRUS 14.2.2011, 21:17
Подскажите, можно ли в Делфи воздать словарь с числовыми полями?
Про StringList.Values я знаю, но слегка неэффективен он.

Задача хранить большой такой словарь (не меньше 5000) значений число  -  строка.
Поля начинаются с $80000000 и заканчиваются примерно $84000000

Если идея создавать динамический массив, но программа падает на SetLength(array, $84000000)

Подскажите кто сталкивался оптимальное решеение.

Автор: CodeMonkey 14.2.2011, 22:22
Модератор: Сообщение скрыто.

Автор: northener 14.2.2011, 22:45
Цитата(CodeMonkey @  14.2.2011,  22:22 Найти цитируемый пост)
SetLength(array, $84000000) - это как бэ 8 гигов только на массив, пустой, без строк.

Из которых, при том, реально планируется использовать только последние 260 Мб

Автор: superVad 14.2.2011, 23:07
 smile You made my evening.

Автор: CODeRUS 15.2.2011, 00:31
В разделе для новичков же специально тему создал, чтобы послушать советы а не *ржунимагушки*
Никогда не решал задачи со словарями в Делфи, до этого пользовался питоном - там все просто было.

Единственное что приходит в голову - сделать SetLength( $4000000 ) и при использовании смещать индексы.

Автор: northener 15.2.2011, 00:34
Цитата(CODeRUS @  14.2.2011,  21:17 Найти цитируемый пост)
Если идея создавать динамический массив, но программа падает на SetLength(array, $84000000)

Ну так сделай SetLength(array, $4000000)

Автор: CODeRUS 15.2.2011, 00:39
Да так и сделал, и все-таки. В делфи нет реализации числовых словарей?

Автор: Snowy 15.2.2011, 00:51
Когда я слышу про массивы на несколько сот мегабайт, то вспоминаю историю "о сумасшедшем бородатом русском, который ПРИДУМАЛ ФОРМУЛУ"
В таких случаях всегда советую подумать и понять, почему такой массив не нужен.

CodeMonkey, ай-яй-яй


Цитата(CODeRUS @  14.2.2011,  21:17 Найти цитируемый пост)
Про StringList.Values я знаю, но слегка неэффективен он.
А, если установить Sorted=true?
В несортированном словаре-то поиск конечно неэффективен...

Цитата(CODeRUS @  15.2.2011,  00:39 Найти цитируемый пост)
В делфи нет реализации числовых словарей?
В дельфи есть реализация каких угодно словарей.
Код

  var МойСловарь: TDictionary<Integer, string>;

Но, если версия дельфи древнее 2009, то придется городить хеш-таблицу ручками.

Автор: CODeRUS 15.2.2011, 01:35
о. TDictionary.
пошел ставить 2009 Делфи. ради такого можно и обновиться!

поставлю сразу 2010 дистилированный =)


a вообще StringList не хотел потому как дополнительно переводить число в строку перед действиями нежелательно, в идеале все должно работать моментально.
Надеюсь, что TDictionary поможет мне


Большое спасибо, TDictionary работает довольно шустро. Думаю это именно то что мне было нужно))

Автор: northener 15.2.2011, 02:49
Цитата(CODeRUS @  15.2.2011,  01:35 Найти цитируемый пост)
о. TDictionary.
пошел ставить 2009 Делфи. ради такого можно и обновиться!

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

Автор: northener 15.2.2011, 03:37
Цитата(CODeRUS @  15.2.2011,  00:39 Найти цитируемый пост)
В делфи нет реализации числовых словарей?

Увы в Дельфи много чего нет. 
Как и в жизни. Всё нужно делать своими руками!

Автор: superVad 15.2.2011, 11:15
Цитата(CODeRUS @  15.2.2011,  00:35 Найти цитируемый пост)
a вообще StringList не хотел потому как дополнительно переводить число в строку

В СтрингЛист есть поле Data туда можно что угодно присваивать.

Автор: CodeMonkey 15.2.2011, 12:43
Цитата(CODeRUS @  15.2.2011,  01:31 Найти цитируемый пост)
В разделе для новичков же специально тему создал, чтобы послушать советы а не *ржунимагушки*


Да проблем нет с тем что ты в новичках тему создал. Просто забавно, когда ты при этом оценки и выводы делаешь.

Цитата(northener @  15.2.2011,  04:37 Найти цитируемый пост)
Как и в жизни. Всё нужно делать своими руками! 


Ну не совсем ручками. А брать из, скажем, JCL или DeCAL. Чего и автору советую, если в старых Delphi работать будет.

Цитата(CODeRUS @  15.2.2011,  02:35 Найти цитируемый пост)
пошел ставить 2009 Делфи. ради такого можно и обновиться!

поставлю сразу 2010 дистилированный =)


Лучше ставить Delphi XE - чем выше версия, тем больше исправлено багов.

Автор: superVad 15.2.2011, 12:54
Минусуете - то хоть пишите почему. Мне тоже развиваться как то надо. Не всю же жизнь заблуждаться.

Автор: kami 15.2.2011, 13:35
Цитата(superVad @  15.2.2011,  11:15 Найти цитируемый пост)
В СтрингЛист есть поле Data туда можно что угодно присваивать

Цитата(superVad @  15.2.2011,  12:54 Найти цитируемый пост)
Минусуете - то хоть пишите почему. 

Кстати, да - мне тоже интересно, почему так нельзя/неправильно. Уже довольно давно пользуюсь TList[i] и TStringList.Objects[i] как хранилищем для integer и cardinal. Никаких проблем не замечено...

Автор: northener 15.2.2011, 13:37
Цитата(superVad @  15.2.2011,  12:54 Найти цитируемый пост)
Минусуете - то хоть пишите почему. Мне тоже развиваться как то надо. Не всю же жизнь заблуждаться. 


Цитата(superVad @  15.2.2011,  11:15 Найти цитируемый пост)
В СтрингЛист есть поле Data туда можно что угодно присваивать. 

Какое, какое поле есть в СтрингЛисте? smile 

Автор: Snowy 15.2.2011, 13:41
Задача в обратном - найти строку по числу, а не число по строке  smile 

Автор: superVad 15.2.2011, 18:34
Цитата(northener @  15.2.2011,  12:37 Найти цитируемый пост)
Какое, какое поле есть в СтрингЛисте?  

100% то я с деревом перепутал, тут Objects. Но факт остается фактом.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)