Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.29;
Скачать: CL | DM;

Вниз

Список записей с быстрым поиском по ключу int64   Найти похожие ветки 

 
Nucer   (2011-10-23 13:51) [0]

Требуется наличие методов:
1. Добавление нового элемента
2. Поиск элемента

Порядок элементов не имеет значения. Возможность удаления элементов не требуется.

Важно, чтобы поиск по ключу осуществлялся не обычным перебором элементов от 0 до Count - 1.

Есть ли подобный готовый класс в Delphi 7?


 
DVM ©   (2011-10-23 14:46) [1]

TList


> Важно, чтобы поиск по ключу осуществлялся не обычным перебором
> элементов от 0 до Count - 1.

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

Можно даже TStringList взять, но правда твои int64 в нем будут храниться в виде строки. Но бинарный поиск он поддерживает, если изначально отсортирован. Сам сортировать тоже умеет.


 
Sha ©   (2011-10-23 15:25) [2]

> Есть ли подобный готовый класс в Delphi 7?

нет


 
Nucer   (2011-10-23 15:57) [3]

Спасибо за ответы.

Раньше в таких случаях я использовал TStringList c Objects (Sorted = True). Но, по-моему, хранить числа в строках (и сравнивать числа как строки) - это говнокод. Писать же свою реализацию бинарного дерева и поиска по нему нет никакого желания. Странно, что нет готового класса.


 
MBo ©   (2011-10-23 15:59) [4]

хэш-таблицы хорошо подходят
http://www.boyet.com/FixedArticles/EZDSL.html
http://sourceforge.net/projects/decal/


 
DVM ©   (2011-10-23 19:30) [5]


> Nucer   (23.10.11 15:57) [3]


> Раньше в таких случаях я использовал TStringList c Objects
> (Sorted = True). Но, по-моему, хранить числа в строках (и
> сравнивать числа как строки) - это говнокод.

Расточительно это, но не такой уж и говнокод. SQLite по-моему все как строки хранит.


> Писать же свою реализацию бинарного дерева и поиска по нему
> нет никакого желания

Зачем тебе дерево? Отсортируй просто данные в TList и потом используй бинарный поиск, алгоритм простой. Не сильно уступает хэш таблицам. При вставке вставляй сразу в нужное место.

А вообще посмотри в книге Бакнелл Джулиан - Фундаментальные алгоритмы и структуры данных в Delphi

примеры к ней тоже в инете валяются, там все что надо есть и готовые классы тоже.


 
Медвежонок Пятачок ©   (2011-10-24 09:00) [6]

> Есть ли подобный готовый класс в Delphi 7?

Не совсем в делфи, но есть.
IXMLDOMDocument2.


 
QAZ   (2011-10-24 10:08) [7]


> Nucer   (23.10.11 13:51)

то что ты описал,это даже на класс ни на какой не тянет,это тупо динамический масив


 
sniknik ©   (2011-10-24 10:36) [8]

рекорсет тянет на класс? :)

-
положить один на форму подключить к гриду чтобы сразу видеть результат кода -
begin
 with ADODataSet1 do begin
   with FieldDefs.AddFieldDef do begin
     DataType:= ftInteger;
     Name    := "ID";
   end;
   with FieldDefs.AddFieldDef do begin
     DataType:= ftLargeint;
     Name    := "ID2";
   end;

   CreateDataSet;
   Append;
   FieldByName("ID" ).AsInteger:= MaxInt;
   FieldByName("ID2").AsVariant:= Int64(MaxInt) + MaxInt;
   Post;
   Append;
   FieldByName("ID" ).AsInteger:= 1;
   FieldByName("ID2").AsVariant:= 1;
   Post;

   Sort:= "ID2";
 end;
end;


 
Ega23 ©   (2011-10-24 11:53) [9]

Динамический массив записей.
Рядом TList<Integer> с упорядоченными индексами записей.



Страницы: 1 вся ветка

Текущий архив: 2012.01.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
2-1318595246
Handle
2011-10-14 16:27
2012.01.29
список процедур


15-1318195803
Юрий
2011-10-10 01:30
2012.01.29
С днем рождения ! 10 октября 2011 понедельник


2-1319204159
Alez
2011-10-21 17:35
2012.01.29
Не правильно работает код после перехода на Delphi XE2


2-1319031742
Fr
2011-10-19 17:42
2012.01.29
группировка Items в TListView Delphi 7


2-1318669158
Тима12
2011-10-15 12:59
2012.01.29
Отладка программы