Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как создать словарь с числовыми полями, Есть ли такое в Делфи? 
V
    Опции темы
CODeRUS
Дата 14.2.2011, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 25.7.2007

Репутация: нет
Всего: нет



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

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

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

Подскажите кто сталкивался оптимальное решеение.
PM MAIL   Вверх
CodeMonkey
Дата 14.2.2011, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89




Модератор: Сообщение скрыто.



--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
northener
Дата 14.2.2011, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



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

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


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
superVad
Дата 14.2.2011, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 7
Всего: 15



 smile You made my evening.
PM MAIL   Вверх
CODeRUS
Дата 15.2.2011, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 25.7.2007

Репутация: нет
Всего: нет



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

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

Это сообщение отредактировал(а) CODeRUS - 15.2.2011, 00:37
PM MAIL   Вверх
northener
Дата 15.2.2011, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



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

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


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
CODeRUS
Дата 15.2.2011, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 25.7.2007

Репутация: нет
Всего: нет



Да так и сделал, и все-таки. В делфи нет реализации числовых словарей?
PM MAIL   Вверх
Snowy
Дата 15.2.2011, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 31
Всего: 484



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

CodeMonkey, ай-яй-яй


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

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

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

Но, если версия дельфи древнее 2009, то придется городить хеш-таблицу ручками.
PM MAIL   Вверх
CODeRUS
Дата 15.2.2011, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 25.7.2007

Репутация: нет
Всего: нет



о. TDictionary.
пошел ставить 2009 Делфи. ради такого можно и обновиться!

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


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


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

Это сообщение отредактировал(а) CODeRUS - 15.2.2011, 02:22
PM MAIL   Вверх
northener
Дата 15.2.2011, 02:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



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

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


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
northener
Дата 15.2.2011, 03:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



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

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


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
superVad
Дата 15.2.2011, 11:15 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 7
Всего: 15



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

В СтрингЛист есть поле Data туда можно что угодно присваивать.
PM MAIL   Вверх
CodeMonkey
Дата 15.2.2011, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(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 - чем выше версия, тем больше исправлено багов.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
superVad
Дата 15.2.2011, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 7
Всего: 15



Минусуете - то хоть пишите почему. Мне тоже развиваться как то надо. Не всю же жизнь заблуждаться.
PM MAIL   Вверх
kami
Дата 15.2.2011, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



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

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

Кстати, да - мне тоже интересно, почему так нельзя/неправильно. Уже довольно давно пользуюсь TList[i] и TStringList.Objects[i] как хранилищем для integer и cardinal. Никаких проблем не замечено...
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0589 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.