Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.236.100.210] |
|
Сообщ.
#1
,
|
|
|
Наполняю объект TList структурами:
struct TSTR { UnicodeString Name; double DB; double DE; double Val; }; ... TList *MyList = new TList(); TSTR *pv; ... MyList->Add(new TSTR); pv = (TSTR*)(MyList->Items[MyList->Count - 1]); pv->Name = ...; pv->DB = ...; pv->DE = ...; pv->Val = ...; ... Как избежать попадание в TList структур с одинаковыми элементами, либо после заполнения его быстро удалить дубликаты? Может, есть быстрые методы для этого - типа IndexOf или Duplicates в TStringList? Спасибо. |
Сообщ.
#2
,
|
|
|
Если вкратце, то - никак.
А если чуть подробнее, то наиболее оптимальный способ, вроде бы, таков: 1. Придумываем правило сортировки структуры. 2. При каждом добавлении элемента, сравниваем его со всеми в поисках дубликата. 3. При непопадании в дубль аккуратно вставляем новый на нужное место. Почему оптимальный: время, затрачиваемое на анализ одного элемента, будет всё же небольшим, что положительно скажется на внешней видимости РВ (реального времени). Если же так не делать, а, скажем, проводить поиск дублей каждые 100, 1000, ... включений, то хоть это и может оказаться в сумме быстрее тех первых 'каждовключенческих', но провалы по скорости будут весьма раздражительны. Простыми словами: лучше стабильные 20 кадров/секунду, чем непонятное 'бросалово' от 5 до 60 кадров/секунду. |
Сообщ.
#3
,
|
|
|
Цитата Славян @ Если вкратце, то - никак. Видимо, придётся ручками. Может, есть WinAPI-шные функции |