Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.01.29;
Скачать: [xml.tar.bz2];

Вниз

Список записей с быстрым поиском по ключу 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.003 c
2-1319031742
Fr
2011-10-19 17:42
2012.01.29
группировка Items в TListView Delphi 7


2-1319193339
lewka
2011-10-21 14:35
2012.01.29
Создание таблиц в MS Word


15-1317835426
Empleado
2011-10-05 21:23
2012.01.29
Project Management Software


2-1318595246
Handle
2011-10-14 16:27
2012.01.29
список процедур


15-1318309652
И. Павел
2011-10-11 09:07
2012.01.29
Good bye sweet VCL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский