| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Как создать словарь с числовыми полями |
| Автор: CODeRUS 14.2.2011, 21:17 |
| Подскажите, можно ли в Делфи воздать словарь с числовыми полями? Про StringList.Values я знаю, но слегка неэффективен он. Задача хранить большой такой словарь (не меньше 5000) значений число - строка. Поля начинаются с $80000000 и заканчиваются примерно $84000000 Если идея создавать динамический массив, но программа падает на SetLength(array, $84000000) Подскажите кто сталкивался оптимальное решеение. |
| Автор: CodeMonkey 14.2.2011, 22:22 |
Модератор: Сообщение скрыто. |
| Автор: superVad 14.2.2011, 23:07 |
| |
| Автор: CODeRUS 15.2.2011, 00:31 |
| В разделе для новичков же специально тему создал, чтобы послушать советы а не *ржунимагушки* Никогда не решал задачи со словарями в Делфи, до этого пользовался питоном - там все просто было. Единственное что приходит в голову - сделать SetLength( $4000000 ) и при использовании смещать индексы. |
| Автор: northener 15.2.2011, 00:34 | ||
Ну так сделай SetLength(array, $4000000) |
| Автор: CODeRUS 15.2.2011, 00:39 |
| Да так и сделал, и все-таки. В делфи нет реализации числовых словарей? |
| Автор: Snowy 15.2.2011, 00:51 | ||
| Когда я слышу про массивы на несколько сот мегабайт, то вспоминаю историю "о сумасшедшем бородатом русском, который ПРИДУМАЛ ФОРМУЛУ" В таких случаях всегда советую подумать и понять, почему такой массив не нужен. CodeMonkey, ай-яй-яй А, если установить Sorted=true? В несортированном словаре-то поиск конечно неэффективен... В дельфи есть реализация каких угодно словарей.
Но, если версия дельфи древнее 2009, то придется городить хеш-таблицу ручками. |
| Автор: CODeRUS 15.2.2011, 01:35 |
| о. TDictionary. пошел ставить 2009 Делфи. ради такого можно и обновиться! поставлю сразу 2010 дистилированный =) a вообще StringList не хотел потому как дополнительно переводить число в строку перед действиями нежелательно, в идеале все должно работать моментально. Надеюсь, что TDictionary поможет мне Большое спасибо, TDictionary работает довольно шустро. Думаю это именно то что мне было нужно)) |
| Автор: northener 15.2.2011, 02:49 | ||
Лично у меня есть какое-то внутреннее предубеждение против этих новых классов. |
| Автор: northener 15.2.2011, 03:37 |
Увы в Дельфи много чего нет. Как и в жизни. Всё нужно делать своими руками! |
| Автор: superVad 15.2.2011, 11:15 | ||
В СтрингЛист есть поле Data туда можно что угодно присваивать. |
| Автор: CodeMonkey 15.2.2011, 12:43 | ||||
Да проблем нет с тем что ты в новичках тему создал. Просто забавно, когда ты при этом оценки и выводы делаешь. Ну не совсем ручками. А брать из, скажем, JCL или DeCAL. Чего и автору советую, если в старых Delphi работать будет.
Лучше ставить Delphi XE - чем выше версия, тем больше исправлено багов. |
| Автор: superVad 15.2.2011, 12:54 |
| Минусуете - то хоть пишите почему. Мне тоже развиваться как то надо. Не всю же жизнь заблуждаться. |
| Автор: kami 15.2.2011, 13:35 |
Кстати, да - мне тоже интересно, почему так нельзя/неправильно. Уже довольно давно пользуюсь TList[i] и TStringList.Objects[i] как хранилищем для integer и cardinal. Никаких проблем не замечено... |
| Автор: northener 15.2.2011, 13:37 | ||
Какое, какое поле есть в СтрингЛисте? |
| Автор: Snowy 15.2.2011, 13:41 |
| Задача в обратном - найти строку по числу, а не число по строке |
| Автор: superVad 15.2.2011, 18:34 |
100% то я с деревом перепутал, тут Objects. Но факт остается фактом. |